React native:如何检测组件何时呈现/打开/不起作用的组件



也许这是一个愚蠢的问题,但我找不到答案(我从react native开始(。

我需要检测视图何时打开(堆栈菜单中的开关(,我的视图是一个组件(函数(。如果我的视图被打开,我会在redux中启动一个简单的操作/调度。

我用react原生路由器和Redux进行了搜索,但没有找到解决方案。我用函数组件搜索,但如果我使用useMemo(react(,这个方法只启动一次。组件每次显示一次。

// my menu      
<Tab.Screen
name="Home"
component={HomeScreen}
options={{
tabBarLabel: 'Home',
tabBarIcon: ({ color, focused  }) => (
<Icon name={'home'} size={20} color={focused ? '#6646ee' : "#fff"} />
),
tabBarOptions: { activeTintColor:'black' }
}}
/>

如果你有一个解决方案,也许很简单。。。感谢提前

更新:好的,如果我点击菜单,我会找到一个检测的解决方案

<Tab.Screen
name="Home"
component={HomeScreen2Class}
options={{
tabBarLabel: 'Home',
tabBarIcon: ({ color, focused  }) => (
<Icon name={'home'} size={20} color={focused ? '#6646ee' : "#fff"} />
),
tabBarOptions: { activeTintColor:'black' }
}}
listeners={({ navigation, route }) => ({
tabPress: e => {
console.log('page Home clicked')
}
})}

好的,但是如何在选项卡中调度减速器Press在一个简单的组件中,我必须使用它:

const action = {type: 'ADD_TEST_2', value: 'blaseb'};
props.dispatch(action);

设置一个isOpen状态,并在每次打开视图时设置该状态,然后根据isOpen状态调度操作,怎么样?(我对母语的反应不太自信(。

const [isOpen, setIsOpen] = useState(false);
...
<View dispatch={isOpen ? dispatch(type: SOME_TYPE, payload }}) : null}>...</View>

如果使用react导航,则可以使用useFocuseEffect挂钩。我认为其他路由器库也应该提供一些焦点事件,如API,以实现相同的功能。

最新更新