我在 react 原生应用程序中使用 react-navigation v2 创建了一些选项卡。我创建了 componentDidMount 函数,其中调用了 willFocus。首次运行应用程序并且第一次选择我想要的选项卡时,将焦点不执行。但是当我转到不同的选项卡并返回该选项卡时,现在将执行Focus。Focus第一次不执行而第二次工作正常的原因是什么?
所需的选项卡组件DidMount函数
componentDidMount(){
const {navigation} = this.props;
navigation.addListener ('willFocus', async () =>{
console.log("willFocus runs"
});
}
选项卡导航器与其他导航器嵌套,但我只在下面显示选项卡导航器
TabNav: createBottomTabNavigator(
{
TAB1: Screen1,
TAB2: Screen2,
TAB3: Screen3,
TAB4: Screen4,
TAB5: Screen5,
// Map: MapScreen
},
{
initialRouteName: 'Bar',
transitionConfig: NavigationConfig,
navigationOptions: ({navigation})=>({
tabBarIcon: ({focused, tintColor})=>{
const { routeName } = navigation.state;
let iconName, iconSize;
switch(routeName) {
case "TAB1":
iconName = `icon1`;
break;
case "TAB2":
iconName = `icon2`;
break;
case "TAB3":
iconName = `icon3`;
break;
case "TAB4":
iconName = `icon4`;
break;
case "TAB5":
iconName = `icon5`;
break;
default:
break;
}
return <Icon name={iconName} color={tintColor} type="FontAwesome" />;
},
}),
tabBarOptions: {
activeTintColor: 'black',
inactiveTintColor: 'grey',
activeBackgroundColor: '#abaf9b',
labelStyle: {
fontSize: 12,
},
// style for tabbar
style: {
backgroundColor: '#ffffff',
height: 60,
justifyContent: 'space-around',
alignContent: 'center',
alignItems: 'center',
},
// style for tab
tabStyle: {
paddingTop: 7,
paddingBottom: 7
}
},
}
),
我也有这个问题,它被报告为反应导航的错误。有关详细信息,请查看此问题。
我有两个建议来解决这个问题。
- 尝试更新反应导航并检查问题是否已解决
- 如果第一个解决方案不起作用,作为解决方法,我将调用函数两次,如果您想确保在应用程序的初始启动和屏幕更改时都调用该函数。
PS:再次检查你的函数,并确保调用函数两次不会导致任何侧面问题
componentDidMount(){
console.log("willFocus runs") // calling it here to make sure it is logged at initial start
const {navigation} = this.props;
navigation.addListener ('willFocus', async () =>{
console.log("willFocus runs") // calling it here to make sure it is logged at every time screen is focused after initial start
});
}
我遇到这个问题是因为我的选项卡导航器中有懒惰:真,这导致了这个问题。 我删除了它,现在它也在第一次单击时工作。