我正在制作一个react原生android应用程序,其中componentWillUnmount()不起作用。假设用户在特定屏幕的文本输入中输入一个文本值,然后转到下一个屏幕。之后,当用户按下后退按钮时,我希望在文本输入中写入的文本值被删除。我尝试在代码中添加这一行。
componentWillUnmount(){
this.setState({text:""})
}
基本上,我删除了在TextInput中输入的state值。但这不起作用。活动指示器也是如此。当活动指示器开始获取数据时,我首先检查是否连接到互联网。如果没有,那么通过导航我导航到没有网络屏幕。但当我按下后退按钮时,活动指示器不会消失吗?那么,在导航到不同的屏幕后,我如何删除组件中状态的所有值呢?
您可以添加四个侦听器:
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,可能会导致内存泄漏。