也许这是一个愚蠢的问题,但我找不到答案(我从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,以实现相同的功能。