反应导航和组件生命周期

Mar*_*rác 5 react-native react-navigation

我有一个使用反应导航的 React Native 应用程序。在我的一个屏幕中,我使用相机读取二维码,效果很好,但我必须使用 setState({camera: false}) 来防止多次加载二维码。通常,它有效。即使从主菜单重新进入页面后也是如此。

问题是,当用户按下“<”按钮(iOS / 标题中)时,他应该使用相机重新进入页面。我找不到应该执行 setState({camera: true}) 的函数。如果没有反应导航,就有标准的生命周期(componentWillMount,...),但在这种情况下,我无法找到放置代码的位置,因此我可以检测到该页面已重新进入。

我知道https://github.com/react-community/react-navigation/issues/51但我仍然想念解决方案。

The*_*uan 4

我遇到了一个有点类似的问题,我让屏幕 A 打开屏幕 B,我想捕获从 B 返回屏幕 A 的事件。

我最好的猜测是通过导航函数从屏幕 A 向屏幕 B 发送回调:

this.props.navigation.navigate("ScreenB",{
   onClose : ()=>{
      // update your state to open back the camera
   }
})
Run Code Online (Sandbox Code Playgroud)

然后我需要捕获屏幕 B 上的关闭事件,该事件基本上是 componentWillUnmount:

在 ScreenB 组件类中:

componentWillUnmount(){
   this.props.navigation.state.params.onClose()
}
Run Code Online (Sandbox Code Playgroud)

  • 使用react-navigation,当您离开场景时,不会调用componentWillUnmount,但它在后台保持打开状态。在 github 问题中,他们试图找到这个问题的解决方案(目前有 106 条评论)。 (3认同)