javascript - react-router-dom:如何进行异步调用来决定渲染组件?
问题描述
我有一个将 access_token 发送到验证端点的 isAuthenticated 方法。如果响应有错误,我将 refresh_token 发送到刷新端点,每当我获得新的访问令牌时,我将其保存在 localStorage 中并...
这个方法是异步的,我用它来决定是否渲染一个组件。
const AuthenticatedRoute = ({ children, ...rest }) => {
const auth = useContext(AuthContext);
return (
<Route
{...rest}
**render={() => {
return auth.isAuthenticated() ? (**
<>{children}</>
) : (
<Redirect to="/login" />
);
}}
></Route>
);
};
我不能给渲染方法一个异步方法。我完全不知道如何处理这种情况。也许我的策略是错误的。我可以以某种方式使用 isAuthenticated 来决定在此策略中呈现组件吗?
解决方案
我认为。在 useEffect 中运行异步方法以更改状态
const AuthenticatedRoute = ({ children, ...rest }) => {
const auth = useContext(AuthContext);
const [isAuthenticated, setIsAuthenticated] = useState(false);
useEffect(() => {
setIsAuthenticated(auth.isAuthenticated())
},[auth])
return (
<Route
{...rest}
render={() => {
return isAuthenticated ? (
<>{children}</>
) : (
<Redirect to="/login" />
);
}}
></Route>
);
};
推荐阅读
- python - get_text 不适用于 div 标签
- r - 如何通过在 R 中有效地过滤和分组来对数据进行子集化
- php - 在 CQRS 应用程序中执行验证/不变量
- python - ModuleNotFoundError:没有名为“PyQt5.QtWebKit”的模块
- javascript - 在html中的div中显示文本
- javascript - java - 如何在Java Web应用程序中的页面刷新后保留选定的单选按钮
- .htaccess - 在网站上存储敏感图像的最安全方法是什么?
- javascript - 从 JSON 中调用对象的值时,为什么必须用引号和加号括起来?
- javascript - php没有通过$_POST接收变量
- javascript - 无法从 getElementsByClassName 访问 HTMLCollection 中的元素