React native 当react navigation reset未立即从堆栈中卸载屏幕时,如何在使用react navigation时重置redux存储的状态?

React native 当react navigation reset未立即从堆栈中卸载屏幕时,如何在使用react navigation时重置redux存储的状态?,react-native,redux,react-navigation,redux-saga,React Native,Redux,React Navigation,Redux Saga,我正在尝试使用react native进行身份验证注销,遇到了一个问题,我想重置redux存储的状态,但是,因为我使用react导航,我有一堆redux连接的屏幕,它们仍然安装在屏幕上,当状态树重置为其初始状态时会重新呈现,导致一堆异常错误。我尝试在注销时使用react导航重置卸载它们,该重置会将用户重定向到注册/登录屏幕,但我无法知道这些屏幕何时实际卸载,以便调用reset\u STATE操作。起初,我是通过传奇故事来发布这一行动的 sagas/logout.js import{LOGOUT

我正在尝试使用react native进行身份验证注销,遇到了一个问题,我想重置redux存储的状态,但是,因为我使用react导航,我有一堆redux连接的屏幕,它们仍然安装在屏幕上,当状态树重置为其初始状态时会重新呈现,导致一堆异常错误。我尝试在注销时使用react导航重置卸载它们,该重置会将用户重定向到注册/登录屏幕,但我无法知道这些屏幕何时实际卸载,以便调用
reset\u STATE
操作。起初,我是通过传奇故事来发布这一行动的

sagas/logout.js

import{LOGOUT,RESET_STATE}来自'Actions/user';
//一旦用户注销,清除本地存储。
常量clearData=函数*clearData(操作){
AsyncStorage.removietem('user');
收益率看跌期权(
导航操作。重置({
索引:0,
行动:[
导航({routeName:'SignedOut'})
],
})
);
//导致重新渲染,屏幕仍然安装
产量输出({type:RESET_STATE});
}
导出默认函数*logoutSaga(){
交出全部([
收益率(注销、clearData),
]);

}
问题在于,您正在使用“导航”导航到登录/注册屏幕,该屏幕将保留所有其他组件,您可能应该使用back或reset卸载所有组件并显示登录屏幕。

问题在于您使用navigate导航到登录/注册屏幕,该屏幕会保留所有其他组件,您可能应该使用back或reset卸载所有组件并显示登录屏幕。

因为我不知道您的状态如何,这一直是这里的问题,为什么不尝试在所有这些组件上使用componentWillUnmount,设置一个状态变量并检查何时需要重置导航?

由于我不知道您的状态如何,这一直是这里的问题,为什么不尝试在所有这些组件上使用componentWillUnmount,设置一个状态变量并检查何时需要重置导航?

经过长时间的思考,我发现也许我应该把注意力集中在抛出的错误上,而不是我为什么会出错。(不过我确实学到了很多东西)


虽然在调用reset后找出如何监听所有屏幕完全卸载的情况非常有帮助,但这只是绕过实际问题的快捷方式,但我的redux状态的某些分支的initialState是错误的。更正此错误后,无论react navigation何时决定卸载旧屏幕,都不会再出现错误。

经过长时间的思考,我发现也许我应该关注抛出的错误,而不是为什么会出现错误。(不过我确实学到了很多东西)


虽然在调用reset后找出如何监听所有屏幕完全卸载的情况非常有帮助,但这只是绕过实际问题的快捷方式,但我的redux状态的某些分支的initialState是错误的。更正此错误后,不再出现错误,无论react navigation何时决定卸载旧屏幕。

我使用的是重置,问题是它不会立即卸载所有屏幕,而是在重置导致的重定向完成后发生。我使用的是重置,问题是它不会立即卸载所有屏幕,它发生在重置导致的重定向完成后。