React native 如何在react native中更改屏幕时删除状态值

React native 如何在react native中更改屏幕时删除状态值,react-native,React Native,我正在制作一个react原生android应用程序,其中componentWillUnmount()不起作用。假设用户在特定屏幕的文本输入中输入一个文本值,然后转到下一个屏幕。之后,当用户按下“后退”按钮时,我希望删除在文本输入中写入的文本值。我尝试在代码中添加这一行 componentWillUnmount(){ this.setState({text:""}) } 基本上,我是在删除我在TextInput中输入的状态值。但这不起作用。在activity indicator的情况下

我正在制作一个react原生android应用程序,其中componentWillUnmount()不起作用。假设用户在特定屏幕的文本输入中输入一个文本值,然后转到下一个屏幕。之后,当用户按下“后退”按钮时,我希望删除在文本输入中写入的文本值。我尝试在代码中添加这一行

 componentWillUnmount(){
  this.setState({text:""})
  }

基本上,我是在删除我在TextInput中输入的状态值。但这不起作用。在activity indicator的情况下也会发生同样的情况。当activity indicator开始提取数据时,我首先检查是否连接到internet。如果没有连接到internet,则通过导航导航导航到无网络屏幕。但当我按下back按钮时,我会从那里导航到无网络屏幕活动指示器不会消失?那么,在导航到不同屏幕后,如何删除组件中的所有状态值呢?

React导航允许您添加侦听器,以便跟踪屏幕上发生的操作

您可以添加四个侦听器:

  • 将聚焦
    -屏幕将聚焦
  • didFocus
    -屏幕聚焦(如果有转换,转换完成)
  • 将模糊
    -屏幕将不聚焦
  • didBlur
    -屏幕未聚焦(如果有转换,转换完成)

下面是调用
willBlur
的一个示例,其他函数遵循相同的模式,您只需更改传递给函数的值

componentDidMount () {
   this.didBlurSubscription = this.props.navigation.addListener(
   'didBlur',
   payload => {
    // you can perform actions here when the screen `willBlur`
    this.setState({text: ''});
   }
 );
}

componentWillUnmount () {
 // remember to unsubscribe
 if (this.didBlurSubscription) {
   this.didBlurSubscription.remove();
 }
}

当前解决方案不起作用的原因是,屏幕没有卸载,而是进入或离开焦点/模糊。因此将不会调用
组件willunmount
。此外,如果正在卸载组件,则不应尝试设置状态,因为这是一种模式,可能会导致内存泄漏

您是否检查了componentWillUnmount是否正在执行?可能您只是将新屏幕推到屏幕的堆栈中,因此仍然存在。在这种情况下,我将与Redux合作进行状态管理。更容易管理导航使用的依赖项是什么?反应导航!我使用createDrawerNavigator和createStackNavigator