如何在重新访问屏幕上使用componentDidMount

时间:2018-11-27 03:35:11

标签: react-native react-navigation

我有2个屏幕。

Screen 1 -> select city -> store in AsyncStorage -> navigate to Screen 2 

在屏幕2的componentDidMount中,我正在根据所选城市呼叫服务器。
问题
componentDidMount仅在我再次访问该屏幕时立即触发,它将不会转到componentDidMount
我搜索并了解到屏幕2存在于堆栈中,这就是为什么componentDidMount将不会再次触发的原因。
所以我尝试this.props.navigation.dispatch(StackActions.popToTop()); 并且所有人都喜欢这样来重置堆栈,但是没有用。
我没有上传代码,因为我认为解释就足够了。如果需要的话 问

1 个答案:

答案 0 :(得分:1)

好吧,您可能要考虑依赖于React Navigation提供的导航事件(假设您正在使用此功能)。

因此,当您重新访问屏幕2时,可以在屏幕2的导航生命周期的didFocus事件中进行服务器调用。

//in ComponentDidMount you should set a listener to the navigation events
const didBlurSubscription = this.props.navigation.addListener(
  'didFocus',
   payload => {
     // Do your API Call here.
   }
);

// Remove the listener when you are done in componentWillUnMount.
didBlurSubscription.remove();

但是,在这里,我有一个疑问,那就是重新审视您的确切意思吗?是否要在另一个屏幕上显示,例如屏幕3,然后使用goBack返回?如果那是我怀疑的场景,就像您所说的那样Screen2在堆栈中,那么上述解决方案可能会对您有所帮助。

希望这会有所帮助。快乐编码:)