点击底部导航栏切换页面时,怎样更新对应组件使其重新获取值?

问题描述

react-native做的APP,使用React Navigation做路由和导航。如下图
图片描述
底部是一个由createBottomTabNavigator生成的导航栏,点击Tab A 后,显示A组件的内容。
A组件里面也有一个createMaterialTopTabNavigator创建的顶部Tab 导航栏,默认显示 C组件。
C组件里面是一个列表。
需求是这样的:当我点击Tab A 时,希望C组件里的列表可以更新(重新调用后端接口获取值)。

我想过的方法是:监听A组件,当它被触发时,传一个值给C组件,C组件接收到值调用setState保存起来,因为调用了setState方法,C组件就会被触发更新,重新渲染一次。
但是这里也有个问题:组件A怎样传值给组件C? 因为它们不是单纯的父子组件关系,中间还隔着一个导航栏组件!

相关代码

export default class A extends Component {

render() {
    return (
        <View style={{flex: 1}}>
            <TabsCAndD/>
        </View>
    );
}

}

export default class TabsCAndD extends Component {

render() {
    return (
        <CreaterTab />
    );
}

}
const CreateTab = createMaterialTopTabNavigator({

C: {
    screen: C,
    navigationOptions: () => ({
        tabBarLabel: 'C',
    })
},
D: {
    screen: D,
    navigationOptions: () => ({
        tabBarLabel: 'D',
    })
},

}, {}
});
const CreaterTab = createAppContainer(CreateTab);

export default class C extends Component {

render() {}

}

阅读 3.5k
1 个回答

原来直接使用 DeviceEventEmitter 传值就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题