当前位置: 首页 > news >正文

广西住房城乡建设厅官方网站关键词调词平台

广西住房城乡建设厅官方网站,关键词调词平台,肇庆关键词网站排名,什么软件可以免费查企业电话需求: 在一个页面下有多个子tab在某些tab 下,或者父节点的数据更新的时候,其他子tab 或者父节点也要同步更新 进程: 正常情况下会把所有用到的数据都移动到父节点,修改行为也都放在父节点但如果这样的话父节点的数据…

需求:

  • 在一个页面下有多个子tab
  • 在某些tab 下,或者父节点的数据更新的时候,其他子tab 或者父节点也要同步更新

进程:

  • 正常情况下会把所有用到的数据都移动到父节点,修改行为也都放在父节点
  • 但如果这样的话父节点的数据会非常的多,而且有可能只是某两个子节点的数据需要更新,这就很麻烦
  • 换一个思路,所有的数据都放在各自子节点但是,在某个变化发生的时候,触发一下更新逻辑
  • 那又回到之前的那个问题了,需要每一个子节点都传入对应的触发函数
  • 再换一个逻辑,增加一个全局的hook 并绑定上对应的事件,在你想要触发更新的时候调用一下这个hook 行为,如果有绑定的事件的话,就会触发对应事件
//eventhook
type eventName = string | Symbolconst eventMap = new Map<eventName, Array<Function>>()const addListenerByName = (name: eventName, func: Function) => {if (typeof func !== 'function') {return ;}const listeners = eventMap.get(name) || []if (!listeners.includes(func)) {eventMap.set(name, [...listeners, func])}
}const removeListenersByName = (name: eventName, func: Function) => {const listeners = [...(eventMap.get(name) || [])]eventMap.set(name, listeners.filter(f => f !== func))
}const triggerEventByName = (name: eventName) => {const listeners = eventMap.get(name) || []listeners.forEach(f => f())
}type useEventReturn = {addListener: (func: Function) => () => void, // 调用返回的Function会remove监听removeListeners: (func: Function) => void,triggerEvent: () => void,
}
/*** 记得清除副作用* @param evenetName* @returns*/
export const useEvent = (name: eventName = '@@init'): useEventReturn => {return {addListener: func => {addListenerByName(name, func)return () => removeListenersByName(name, func);},removeListeners: func => removeListenersByName(name, func),triggerEvent: () => triggerEventByName(name),};
}
  • 使用的时候 export 一个固定的名字 export const UPDATEUSERDATAEVENTNAME = Symbol('event_name')
  • use 这个hook const { addListener } = useEvent(UPDATEUSERDATAEVENTNAME)
  • 在需要被监听的地方在初始化的时候加入对应的监听逻辑
useEffect(() => addListener(() => actionRef.current?.reload()), [])
  • 在需要触发这个监听逻辑的地方加入const { triggerEvent } = useEvent(UPDATEUSERDATAEVENTNAME)
  • 并触发这个监听
useEffect(() => {triggerEvent()}, [userId] )
  • 这个做法的好处是就不需要往子组建传一堆东西了,而且也做到了更好的解耦

拓展

  • 在使用这个方法的时候需要一个全局唯一的名字所以用到了 Symbol
  • Symbol是一个绝对唯一的常亮,极端的例子 Symbol(“test”) != Symbol(“test”)
http://www.yayakq.cn/news/758400/

相关文章:

  • 企业网站建设版本赣州稳稳科技有限公司
  • 网站建设的误区html5手机网站开发框架
  • 个人网站psd优化网站制作方法大全
  • 如何自建网站服务器php网站建设哪家好
  • 网站设计与制网站跳转到另外一个网站怎么做
  • 网站详情页用哪个软件做ps做购物小网站
  • 网站关键词优化报价创鑫云网络
  • 高中生做网站网页404 重定向 wordpress
  • 网站主题模板下载泰安房产网站建设
  • 网站广告怎样做wordpress获取当前页面链接
  • 深圳网站定制价格低滨州 网站开发
  • 网站开发价格预算做网站app需要懂些什么软件
  • 灵台教育局网站师资队伍建设软件外包
  • 云南 旅游 网站建设互联网营销师有必要考吗
  • php 网站开发收费怎么给领导做网站分析
  • 毕业设计 网站建设选题成都建网站成都建网站
  • 怎么做淘宝客手机网站达内教育
  • 网站默认首页文件顺序推荐6个免费国外自媒体平台
  • 怎样在百度搜到自己的网站做网站赚钱一般做什么
  • 做网站公司融资多少钱房产信息网 源码
  • 一级做爰片c视频网站wordpress 不同分类 不同主题
  • 学校网站源码免费开公司需要几个人注册
  • 一站式服务图片前台模板之家免费
  • 网站建设公司怎么做的济南网站建设公司熊掌号
  • 微信小程序网站制作网络整合营销案例
  • 企业网站服务门户找产品代理去哪个网站
  • 请人做网站后台密码专注东莞微信网站建设
  • 广州品牌网站建设公司棋牌源码搭建论坛
  • 电子商务网站建设需要哪种语言struts2 做的网站
  • 网站竞价开户网站建设pad版本是什么