为什么 useEffect 不是构造函数?

问题描述

如果我想在 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 (将#修改为@)