我正在使用setRoot()
从堆栈导航切换到底部标签导航,反之亦然。我注意到的是每次调用setRoot
时,都会重新创建我的组件(再次调用构造函数,this.props显示不同的roottag,等等)
现在,当我使用Navigation.events().registerBottomTabSelectedListener(this.tabSelectedListener)
聆听底部选项卡中的选项卡选择时,我会收到有关所创建组件的每个实例的事件。我需要听这个才能调用api并获取数据。如果重新创建了3个实例,则api将称为3x。 lodash /下划线去抖动无法过滤该调用,因为它调用了组件/函数的3个不同实例。
问题是,setRoot是否真的是从选项卡切换到堆栈的正确方法?
答案 0 :(得分:0)
确实是导致此问题的听众。我是这样修复的:
let listener;
export default class YourComponent extends Component {
constructor(props) {
super(props);
listener = Navigation.events().registerBottomTabSelectedListener(({ selectedTabIndex, unselectedTabIndex }) => {this.bottomTabSelected(selectedTabIndex, unselectedTabIndex)});
}
componentWillUnmount() {
listener.remove();
}
...