本文档基于react-navigation的 3.11.0版本
在使用react-navigation底部选项卡导航切换的时候,默认只有第一次切换页面的才会完整执行组件的生命周期,执行数据请求等逻辑,如果我们希望在每次切换的时候都要重新请求数据,也就是刷新页面,则需要调用一个不太常用的API配置:tabBarOnPress。
注意使用此配置之后,tab切换将不会自动跳转页面,需要自己手动处理跳转,具体看代码中注释(跳转处理)。
比如下图,每次切换到首页的时候需要重新请求首页的数据已达到刷新首页的效果,则步骤如下:

1、使用createBottomTabNavigator创建Home的配置如下:
createBottomTabNavigator(
{
Home: {
screen: Home,
navigationOptions: {
tabBarLabel: '首页',
tabBarIcon: ({focused}) => (
focused ?
<Image source={{uri: 'https://img.alicdn.com/xx/TB1H5ktzxv1gK0jSZFFXXb0sXXa-192-192.png'}}
style={{width: iconSize, height: iconSize}}/> : <Image
source={{uri: 'https://img.alicdn.com/xx/TB1gu.vzuH2gK0jSZJnXXaT1FXa-192-192.png'}}
style={{width: 24, height: 24}}/>
),
},
},
// ... 其他tab项配置
}
2、Home页面添加以下代码:
class Home extends Component{
static navigationOptions = () => ({
tabBarOnPress: ({navigation, defaultHandler}) => {
navigation && navigation.state && navigation.state.params && navigation.state.params.navigatePress();
}
});
clickTabCallback = () => {
const focused = this.props.navigation.isFocused();
if (!focused) {
this.props.navigation.navigate('Home');
this.getCount();
}
};
componentDidMount() {
this.props.navigation.setParams({navigatePress: this.clickTabCallback});
}
}
exprot default Home;
打完收工,关键点代码中已有注释,不明之处请留言。
