react-native - 未声明的基于商店的 React Navigation 导致警告
问题描述
我在我的 react native 项目中使用 react-navigation 和 Unstated 。
我有一种情况,我想使用:
this.props.navigation.navigate("App")
成功登录后。
问题是我不希望它直接从分配给提交按钮的功能中完成。我想基于全球未说明的商店进行导航。
但是,这意味着我需要使用Subscribe
包装器的条件 INSIDE。这就是导致可怕的原因Warning: Cannot update during an existing state transition (such as within 'render').
render() {
const { username, password } = this.state;
return (
<Subscribe to={[MainStore]}>
{({ auth: { state, testLogin } }) => {
if (state.isAuthenticated) {
this.props.navigation.navigate("App");
return null;
}
console.log("rendering AuthScreen");
return (
<View style={styles.container}>
<TextInput
label="Username"
onChangeText={this.setUsername}
value={username}
style={styles.input}
/>
<TextInput
label="Password"
onChangeText={this.setPassword}
value={password}
style={styles.input}
/>
{state.error && (
<Text style={styles.error}>{state.error.message}</Text>
)}
<Button
onPress={() => testLogin({ username, password })}
color="#000"
style={styles.button}
>
Sign in!
</Button>
</View>
);
}}
</Subscribe>
);
有用。但是正确的方法是什么?我无法访问MainStore
外部,Subscribe
因此无法访问render
.
解决方案
我不确定反应导航模式,但您可以在订阅“MainStore”的组件周围使用包装器,并将其作为道具传递给该组件。这样您就可以在渲染方法之外访问“MainStore”。
推荐阅读
- javascript - 识别模糊事件的ckeditor textarea id
- php - 如何确保在开始下一个事件之前执行并完成同一事件的多个 Laravel 侦听器?
- excel - 更改具有非白色背景颜色的任何单元格中的字体样式
- php - 试图禁止 wordpress 重定向到 https
- python - 直接查找一年中每一天的平均值
- java - 使用 JavaMailAPI 通过电子邮件发送图片
- qt - 如何将 qml 文件创建/集成到 qt-widgets 应用程序中?
- r - 根据日期条件拆分 R 中的行
- javascript - VSCODE 中的 Graphql 文件路径自动补全
- javascript - 如何显示对象中的所有内容,包括嵌套对象和数组?