用useEffect来控制subscribe订阅时,切换语言无法触发卸载时的处理

来源:8-10 【redux封装】在函数式组建中使用react-redux

qq_慕勒5016658

2022-09-14

我用useEffect,让组件挂载时提交订阅,卸载时取消订阅
但是切换语言时会多次触发订阅,而不会触发卸载时的取消订阅,只有切换到其他页面时才会触发取消订阅的处理
这种情况该如何解决?

  useEffect(() => {
    const unsubscribe = store.subscribe(() => {
      const { language } = store.getState()
      console.log("subscribe")
      setCurLanguage(language)
    })
    return () => {
      unsubscribe()
      console.log("unsubscribe")
    }
  }, [])
写回答

1回答

weixin_慕无忌8184591

2022-09-28

依赖项为空值 并不会卸载 应该更改为language 并且把 setCurLanguage 提取出去到在变更语言的事件函数当中,也就是你在切换的语言过程当中 才会处发卸载,如果照你这样写,每次render 就会触发 setState 再去render 一次,useEffect 依赖项是[] 又会导致setState再被触发 进入死循怀


0
1
qq_慕勒5016658
useEffect里提供一个回调函数就能达成组件卸载时触发的效果,空数组作为依赖项只会在组件挂载时触发,并不会造成死循环 我这里的问题是切换语言时,组件都会重新挂载,但并没有进行卸载
2022-09-29
共1条回复

React18 系统精讲 结合TS打造旅游电商平台

React18 精讲 + 结合 TS 实战 + 热门业务开发,获取必备技能

1993 学习 · 1015 问题

查看课程