当前位置: 首页 > 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/348820/

相关文章:

  • 网站的开发建设要做什么免费的外网服务器
  • 网站开发语言分析百度指数查询
  • 高邮市建设局网站photoshop在线修图
  • 公司网站开发款记什么科目佛山外贸网站建设渠道
  • 三门峡 网站开发企业宣传片的制作流程
  • 网站建设规划书百度文库团购网站前景
  • 建立网站需要多少钱萍畜湖南岚鸿首选网站调研怎样做
  • 大型网站建设优化企业网站建设图片logo
  • 专业网站定制 北京sae wordpress 媒体库
  • 部队网站建设报告公司做网站需要注意些什么问题
  • 企业名录搜索软件 2022广州百度推广排名优化
  • 赣州市铁路建设办公室网站蜜蜂vp加速器七天试用
  • 网站空间可以自己买吗网站技术培训班有哪些种类
  • 网站部署到终端机怎么做wordpress 工具栏图标
  • 营销型网站建设平台淄博铭锐 网站建设
  • 模板网站多钱韩国做hh网站
  • mysql做网站互联网营销外包公司
  • 重庆网站房地产网站建设sz886
  • 本地搭建多个网站什么叫seo优化
  • 全屏企业网站欣赏国外的网站用不用备案
  • 定制一个企业网站多少钱浙江网上注册公司流程
  • 惠州网站建设效果中国交通建设集团第四工程局网站
  • 网站建设解决网站设计书怎么写
  • 网站建设任职资格最新发布的手机
  • 淘宝客如何免费做网站wordpress 编辑器标签
  • 58同城有做网站北京做胃镜哪好德胜门网站I
  • 微网站作用深圳建设工程交易网官网
  • 网站首页html制作代码淘宝做促销的网站
  • 云南网站设计联系方式id怎么打开wordpress
  • 昆山企业网站建设广州网站建设seo