使用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,我希望FirstScreen
的focusHandler能够工作。
1条答案
按热度按时间fslejnso1#
如果您希望焦点侦听器仅在
First
屏幕的焦点状态发生变化时被调用,而不是FirstScreen
屏幕,则必须将逻辑移动到First
屏幕。如果您确实需要
FirstScreen
中的逻辑,那么您可以在First
屏幕中使用useIsFocused()
,并通过上下文将其传递给FirstScreen
,以便在它发生更改时执行某些操作。