问题描述
如果我想在 DOM 准备好之前调用或检查状态,useEffect 如何使用?
在我的示例中,useEffect
在 DOM 准备就绪后被调用。
例如,我有一个父包装器,检查本地令牌的任务在哪里,如果有令牌,则将用户重定向到那里,不是,则重定向其他内容。
App.js
- 包装器
import React,{ useEffect } from "react";
...
useEffect(() => {
if (cookies["_sf-jwt"]) dispatch(setToken(cookies["sf-jwt"])); // this works,state is really updated,but...
},[]);
...
当我必须访问受保护的路线时,状态的必要部分在哪里,例如 isUser = false / true
,
首先是在受保护的路由和她的组件中安装的内容,而不是来自父组件(上面的 App.js)的 useEffect
,因此,我得到了第一个 on-call 旧默认状态,我不能允许用户进入页面,之后app.js中的useEffect生效了,状态更新了,但是晚了,我受保护的组件不知道吗?
Protected.js
...
const user = useSelector(currentUser); // init state from redux
...
render={() => {
return user.currentUser.loggined ? ( // user.currentUser.loggined is false on init
children
) : (
<Redirect to="/register"></Redirect>
);
}}
...
我的问题是,为什么以及如何?
我找到了一个解决方案,摆脱了 useEffect
将逻辑放在组件顶部,现在可以按照我想要的方式工作。
我的解决方案是否安全,我可以执行上述类似操作(将来从 useEffect
中转义?),对于 redux 是否安全?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)