与其说是一个bug,不如说是一个问题。
我有一个带有react-navigation的聊天消息应用程序,其中一个标签栏包含堆栈,而所述堆栈包含屏幕。
收到消息时,我需要知道当前是否有聚焦的聊天屏幕(以及哪个屏幕),以便我知道是否发出徽章警报。这意味着我需要访问navigation
和route
道具。但是,接收消息的API订阅是在底部栏组件中设置的(不确定这是否正确,但是很容易将徽章编号从那里传递到标签栏图标),并且令人遗憾的是,它会做出反应导航,此组件没有导航/路线道具(并且在列出的解决方案中不能有)。
尝试的解决方案:
我尝试使用useNavigation
,但这告诉我底部的标签栏组件不在屏幕中(duh)。
我尝试使用屏幕道具listeners
:在focus = true时触发,但在focus = false时不触发。如果可以使用的话,这将是非常有用的,因为它可以让我简单地传递高级标签栏组件的状态,并从该侦听器对其进行编辑。
我正在考虑使用类似的东西:
useFocusEffect(
useCallback(() => {
console.log('f', navigation.isFocused());
return () => console.log('nf', navigation.isFocused());
}, [navigation]),
);
但这需要我设置上下文,因此我将其作为最后的选择。
我希望有人告诉我我做错了什么,并且有更好的方法可以做到这一点,或者到目前为止还缺乏反应导航,我必须使用解决方案3来做到这一点。