react-native - React Native Redux 条件渲染
问题描述
我正在尝试根据 redux 商店状态在我的应用程序中呈现 2 个不同的屏幕。
const App = () => {
return (
<Provider store={store}>
<NavigationContainer ref={navigationRef}>
{store.getState().auth.id ? (
<Home />
) : (
<Stack.Navigator screenOptions={HeaderStyles}>
<Stack.Screen
name='Splash'
component={Splash}
options={{ headerShown: false }}
/>
<Stack.Screen name='SignUp' component={SignUp} />
<Stack.Screen name='Login' component={Login} />
</Stack.Navigator>
)}
</NavigationContainer>
</Provider>
);
};
启动时store.getState().auth.id
未定义,因此应用程序正确显示启动画面。在此屏幕中,我在商店中设置了 auth.id,但应用程序不会重新呈现并停留在启动屏幕中。如果我在不更改任何内容的情况下保存任何源文件,如果强制重新渲染并且我会正确路由到 Home。
当商店发生变化时,如何强制重新评估三元运算符?
解决方案
在您的文件中,store
它是从它正在创建的文件中导入的,而不是通过道具 ( mapState
|| useSelector
) 注入的。因为 React 重新渲染是基于 props 的变化 || 状态,组件不知道它应该再次渲染。
解决这个问题的简单方法是在子组件中声明条件部分并正确注入 redux 状态。
<Provider store={store}>
<NavigationContainer ref={navigationRef}>
<Navigator />
</NavigationContainer>
</Provider>
....
const Navigator = () => {
let { id } = useSelector(state => state.auth)
return !!id ? (
<Home />
) : (
<Stack.Navigator screenOptions={HeaderStyles}>
<Stack.Screen
name='Splash'
component={Splash}
options={{ headerShown: false }}
/>
<Stack.Screen name='SignUp' component={SignUp} />
<Stack.Screen name='Login' component={Login} />
</Stack.Navigator>
)
}
推荐阅读
- node.js - ParallelSaveError:无法并行保存()同一个文档。文档:
- powershell - 如何处理错误输入的日期和密码复杂性?
- php - WooCommerce 彩票号码:在彩票号码中添加前导零
- c - 关于使用 sprintf 和 snprintf 中的指针构建字符串的新手 C 问题
- reactjs - 如何在“react-native-webrtc”中播放音频
- r - R情绪分析;找不到“词典”;
- javascript - 如何将列的内容传递给 react-bootstrap-table2 中的 dummyField
- java - 使用 PrintStream 后 System.out.println() 未运行
- r - 如何在ggplot中添加带有“三类变量”的条纹和图案?
- javascript - 在多平台(窗口、macOS、浏览器)中使用本机 api 打印照片?