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

一款简洁的个人主页源码seo建站技术

一款简洁的个人主页源码,seo建站技术,做网站怎么让字居右,浙江东阳市网站建设公司需求: 在一个页面下有多个子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.ds6.com.cn/news/109631.html

相关文章:

  • 南京网络科技网站建设搜狗收录批量查询
  • 真正免费手机建站营销模式和营销策略
  • 台州做微网站怎么建立个人网站
  • 深圳住房宝安和建设局网站推广方案怎么写
  • 建一个设计网站要多少钱扬州百度seo公司
  • 网站设计规划的创意百度推广优化中心
  • 网站后台管理系统内容如何做网站赚钱
  • 五核网站建设sem优化托管公司
  • 昆明房产网站建设免费宣传平台
  • 品牌平价网站建设易搜搜索引擎
  • 营销型企业网站案例金花站长工具
  • 洛阳做网站排名百度指数数据分析平台官网
  • 公司网站建设视频教程优化手机流畅度的软件
  • 企业门户网站开发公司成都seo外包
  • 网站开发设计实训总结最近的国际新闻大事10条
  • wordpress定时发布原理成都百度推广优化创意
  • 装修免费设计免费seo优化
  • 合肥公司网站建设山东一级造价师
  • 凤翔网站制作什么是百度权重
  • 怎么给钓鱼网站做防红网站开发的基本流程
  • 中国建设招标网网站首页百度指数数据官网
  • 怎么做钓鱼网站生成网络营销师怎么考
  • 建网站靠什么盈利百度云建站
  • 微信门户网站开发长沙县网络营销咨询
  • 深圳工装公司重庆seo整站优化
  • 唐山石家庄做网站哪家好seo神器
  • 电子商务中网站开发中国优化网
  • 聊城手机站网站公司电话网络优化培训要多少钱
  • 漂亮网站底部代码淘宝店铺怎么引流推广
  • 怎么做手机版网站百度收录提交网站后多久收录