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



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

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

基本上,我删除了在TextInput中输入的state值。但这不起作用。活动指示器也是如此。当活动指示器开始获取数据时,我首先检查是否连接到互联网。如果没有,那么通过导航我导航到没有网络屏幕。但当我按下后退按钮时,活动指示器不会消失吗?那么,在导航到不同的屏幕后,我如何删除组件中状态的所有值呢?

React Navigation允许您添加监听器,以便跟踪屏幕上发生的操作。

您可以添加四个侦听器:

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

https://reactnavigation.org/docs/en/navigation-prop.html#addlistener-订阅导航生命周期的更新

这里有一个调用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();
}
}

您当前的解决方案不起作用的原因是屏幕没有被卸载——它会出现对焦和失焦/模糊。因此不会调用componentWillUnmount。此外,如果组件正在卸载,则不应尝试setState,因为这是一个anitpattern,可能会导致内存泄漏。

相关内容

  • 没有找到相关文章

最新更新