AuthScreen 组件在卸载时抛出更新警告,即使我有一个_isMounted检查



我正在使用Wix react-native-navigation v3,我最初有一个AuthScreen,其中包含键盘显示和键盘隐藏的侦听器。以及绑定到这两个方法的一些方法,这些方法将运行 setState。 我也有这个AuthView连接到Redux。

即使我有一个_isMounted检查,并且我看到组件进入 AuthView 中的 componentWillUnmount 方法,但每当我在登录并点击文本输入以显示键盘后,每当我在不同的屏幕上时,我都会收到警告。好像这个AuthView组件从未真正卸载过。警告的堆栈跟踪指示它来自 AuthView.js 组件。

当然,此警告是已知的"Warning: Can't perform a React state update on an unmounted component"

这是我的身份验证视图.js。所有这些是因为我想在打开键盘时隐藏页脚。我正在考虑完全删除页脚。

constructor(super) {
this._isMounted = true;
}
componentDidMount() {
this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow.bind(this));
this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide.bind(this));
this.setState({
loading: true
}, () => {
this.handleAutoLogin();
});
}
componentWillUnmount() {
this._isMounted = false;
this.keyboardDidShowListener.remove();
this.keyboardDidHideListener.remove();
}
_keyboardDidShow() {
if (this._isMounted) {
this.setState({ footerVisible: false });
}
}
_keyboardDidHide() {
if (this._isMounted) {
this.setState({ footerVisible: true });
}
}

现在,在挖掘了一些信息之后。我在某处读到,如果您有一个与 Redux 连接的组件,它不会真正卸载。这是真的吗?那就奇怪了。因为我有 2 种导航结构,用于登录/注册/恢复帐户的结构,以及基于堆栈的应用程序本身,带有 bottomTabs。我执行它,身份验证视图应该完全消失。为什么要打扰来自不同"应用程序"的警告?

对不起!我简直不敢相信它是什么,这与我上面提到的无关。所有这些都是由 NativeBase 的<Root><Toast>组件引起的,在仔细检查堆栈跟踪后,它提到了 Toast 组件,所以我决定注释掉所有代码并且它起作用了。没有更多的警告。我必须在NativeBase github上发布这个。

相关内容

最新更新