问题描述
正如你在 useEffect 中所知道的,如果我们将任何侦听器分配给 unsubscribe
const,我们会在最后返回 unsubscribe
,如下所示
我们正在使用
useEffect(() => {
const unsubscribe = navigation.addListener('focus',() => {
// code
})
return unsubscribe;
},[navigation]);
如我所愿
useEffect(() => {
const unsubscribe = navigation.addListener('focus',() => {
// code
})
const unsubscribe2 = navigation.addListener('blur',() => {
// code
})
// need to return both listeners
},[navigation]);
解决方法
你可以cleanup
这样
useEffect(() => {
navigation.addListener('focus',handler)
navigation.addListener('blur',handler)
return () => {
navigation.removeListener('focus',handler)
navigation.removeListener('blur',handler)
}
},[navigation])
这里的官方例子https://reactjs.org/docs/hooks-effect.html#effects-with-cleanup
,我没有对此进行测试,但您可能可以执行以下操作:
useEffect(() => {
const unsubscribe = navigation.addListener('focus',() => {
// code
});
const unsubscribe2 = navigation.addListener('blur',() => {
// code
});
return () => {
// executed when unmount
unsubscribe();
unsubscribe2();
}
},[navigation]);