如何控制React Navigation的focusHandler的行为

5uzkadbs  于 2023-04-07  发布在  React
关注(0)|答案(1)|浏览(119)

使用React Navigation的Drawer Navigation,我创建了具有以下结构的Navigation。

<Drawer.Navigator>
    <Drawer.Screen name="First" component={First} />
    <Drawer.Screen name="Second" component={Second} />
    <Drawer.Screen name="Third" component={Third} />
</Drawer.Navigator>

每个抽屉屏幕组件都有堆栈导航的结构,看起来像下面的一个。我在每个抽屉组件中使用useContext创建了提供程序。(FirstProvider,SecondProvider,ThirdProvider)

<FirstProvider>
    <Stack.Navigator>
        <Stack.Screen name="FirstScreen" component={FirstScreen} />
        <Stack.Screen name="FirstDetail" component={FirstDetail} />
    </Stack.Navigator>
</FirstProvider>

我在FirstScreen中定义了focusHandler函数,如下所示,firstFunc是从FirstProvider中获取的函数。

useEffect(() => {
    const focusHandler = navigation.addListener("focus", firstFunc);
    return focusHandler;
}, []);

我好奇的是是否可以让foucsHandler只在Drawer Navigation发生变化时才工作?
例如,在从FirstScreen移动到FirstDetail之后,我希望focusHandler在返回到FirstScreen时不工作。
再举一个例子,如果我通过Drawer从First移动到Second,然后返回First,我希望FirstScreenfocusHandler能够工作。

fslejnso

fslejnso1#

如果您希望焦点侦听器仅在First屏幕的焦点状态发生变化时被调用,而不是FirstScreen屏幕,则必须将逻辑移动到First屏幕。
如果您确实需要FirstScreen中的逻辑,那么您可以在First屏幕中使用useIsFocused(),并通过上下文将其传递给FirstScreen,以便在它发生更改时执行某些操作。

相关问题