reactjs - 反应原生 mapStateToProps 和 React.useEffect 渲染问题
问题描述
我有一个项目需要在用户为空时显示注册模式,它有时会工作?
我问一个状态元素是否用户存在,然后显示模态,问题是当用户登录时,显示页面时,有时会显示注册模态,
喜欢它呈现,然后检查 user === null
那是我的问题吗?
注意:在其他选项卡上,这工作正常,就像它有更多时间来加载状态?
const mapStateToProps = ({ firebase, navigation }) => ({
firebase,
})
function Feed ({ feed, firebase }) {
React.useEffect(
() => navigation.addListener('focus', () =>
{
console.log("aki:: ",firebase.user)
if (firebase.user === null) {
//SHOW MODAL TO INVITE REGISTER
setVisible(true),
navigation.dispatch(navigateToBrowse())
} else {
setVisible(false)
}
}
),
[]
);
解决方案
这可能是因为 firebase.user 在渲染该组件之前没有设置 prop。没有看到父组件就无法判断。
您可以阻止树渲染,直到 firebase.user 存在。
否则,您必须区分 1. auth 正在加载,2. auth 已完成加载且用户不存在,以及 3. auth 已完成加载且用户存在。
我最初认为这是因为您处理导航副作用的方式,所以无论如何这里是代码:
function Feed({ feed, firebase }) {
const [visible, setVisible] = useState<boolean>(false);
React.useEffect(() => {
const checkForUser = () => {
setVisible(firebase.user === null);
}
// Check for user on all focus events
navigation.addListener('focus', checkForUser);
// Also check for user immediately
checkForUser();
}, []);
React.useEffect(() => {
// Only navigate away when visible gets turned on
if (visible) navigation.dispatch(navigateToBrowse());
}, [visible])
}
推荐阅读
- javascript - 按下表格行中的按钮将单元格复制到剪贴板 - Javascript
- vsto - Outlook VSTO 插件:根据 AppointmentItem.Body 中输入的文本更新 RibbonBar
- python - 将 .csv 文件从本地上传到 django Admin
- google-cloud-platform - 如何连接 oauth2 客户端以在我的谷歌云虚拟机中使用谷歌表格 API 的服务
- html - 如何打破 HTML 中的长文本,使其适合图像的宽度并继续到下一行?
- smt - 逐渐减弱 Maxsat
- postgresql - 错误:列 >>?column?<< 指定了多次
- python - 如何在熊猫数据框中添加计算列?
- python - 有没有办法在opencv python中同时获得主流和子流
- php - 如何制作一个可以获取订单的 Woocommerce php 插件