node.js - React Native Navigation - 即使使用 stackactions.reset 后组件也不会卸载
问题描述
我正在使用带有 react-navigation v4 的 react native
我有一个主屏幕和一个欢迎屏幕。我正在使用 redux 来存储已登录的用户。在欢迎屏幕中(在用户登录之前),我将用户重置为 null,如下所示:
useEffect(() => {
dispatch(updateCurrentUser(null));
});
在我的主屏幕上(用户登录后),我通过以下方式使用注销按钮导航到欢迎屏幕:
<Button
title="Logout"
onPress={() => {
const resetAction = StackActions.reset({
index: 0,
actions: [
NavigationActions.navigate({routeName: "Welcome"}),
]
});
props.navigation.dispatch(resetAction);
// navigationData.navigation.pop();
// navigationData.navigation.navigate({routeName: "Welcome"});
}}
/>
运行此程序后,每当我按下注销按钮时都会出现错误
由于用户现在为空,并且在主屏幕上我有以下代码<Text style={styles.text}>Welcome, {currentUser.username}!</Text>
,我收到一个错误,即 null 没有属性用户名,因为 currentUser 现在为空。
我不明白为什么当我重置堆栈并导航到欢迎屏幕时主屏幕不会卸载并且正在呈现。这里可能是什么问题?
解决方案
您可以离开stackaction
并使用 switchnavigator 并将这两个屏幕放在不同的堆栈中。喜欢
export default createAppContainer(createSwitchNavigator(
{
stack1:ScreenStack1,
App: AppTabs,
},
{
initialRouteName: 'AuthLoading',
}
));
因此,如果我navigation.navigate("App")
从 stack1 开始,并且在某个时间点,如果我从此处的 App 回到 stack1,那么 stack1 的navigation.navigate("stack1")
所有屏幕都会表现得像重新渲染一样。
推荐阅读
- javascript - 卡在 onclick 向画布元素
- css - React - 淡入 div,暂停和淡出 div
- javascript - 平滑滚动不起作用(JavaScript)和一些错误
- c# - “无法将‘PanelNamingContainer’类型的对象转换为‘Telerik.Web.UI.GridItem’类型”
- python - 如何在scipy(Python)中获得伽马分布的概率分布函数和累积密度函数的方程
- android - 删除kotlin中的项目后如何在android中更新recycleView?
- c++ - 快速排序功能的不正确比较和交换计数器输出
- yocto - 如何在 Yocto - Makefile 系统中构建 bootgen 实用程序?
- c++ - 当使用 C::B 构建的程序不起作用时
- gitlab - Gitlab按最后提交日期对多个存储库进行排序