用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再被触发 进入死循怀
012022-09-29