reactjs - 试图在我的反应应用程序中使用 cookie,但它一直被重新渲染
问题描述
我有一个带有登录/注销功能的反应应用程序。我希望应用程序在重新加载后保持登录状态,为此我正在使用 cookie。问题是,在我实现了我认为应该工作的内容之后,我收到了“警告,超出了最大更新深度。当组件在 useEffect 中调用 setState 时可能会发生这种情况,但 useEffect 要么没有依赖数组,要么没有每次渲染的依赖项都会发生变化”消息。
我究竟做错了什么?
非常感谢!!
这是代码。
会话.ts
import React from "react";
import * as Cookies from "js-cookie";
export const setSessionCookie = (session: any): void => {
Cookies.remove("session");
Cookies.set("session", session, { expires: 14 });
};
export const getSessionCookie: any = () => {
const sessionCookie = Cookies.get("session");
if (sessionCookie === undefined) {
return {};
} else {
return JSON.parse(sessionCookie);
}
};
export const SessionContext = React.createContext(getSessionCookie());
主要的.tsx
import React, { useState, useEffect } from "react";
import { Switch, Route, Router } from "react-router-dom";
import Comp1 from "./components";
import Comp2 from "./components";
import { getSessionCookie, SessionContext } from "./session";
import { createBrowserHistory } from "history";
export default function Main() {
const [session, setSession] = useState(getSessionCookie());
useEffect(() => {
setSession(getSessionCookie());
}, [session]);
const history = createBrowserHistory();
return (
<SessionContext.Provider value={session}>
<Router history={history}>
<Switch>
<Route exact path="/" component={Comp1} />
<Route path="/comp2" component={Comp2} />
</Switch>
</Router>
</SessionContext.Provider>
);
}
解决方案
我认为问题在于您的内部useEffect
正在更改会话,然后观察会话更改。您可能可以比较新的 cookie,并且只有在 cookie 发生更改时才更新会话 -
useEffect(() => {
const cookie = getSessionCookie();
if (cookie !== session) setSession(cookie);
}, [session]);
不确定您的 cookie 到底是什么样子 - 您可能需要进行比!==
.
推荐阅读
- css - 为什么在使用相同的倾斜时我的字体大小看起来会有所不同?
- codeceptjs - 使用 CodeceptJS 在 Chromium 中运行自定义 JavaScript?
- anaconda - Theano 无法识别 Anaconda 新编译器
- c++ - 查找最长的公共子串
- java - 如何通过 RestController 代理内部 mjpeg 端点
- apache-spark - 为什么 DROP TABLE 忽略子句 IF EXISTS?
- java - 如何在小数点后四舍五入到最接近的 5
- java - `commitNow()` 和 `postDelayed` 如何使这段代码工作?
- javascript - GulpUglifyError:无法缩小 JavaScript - 排序映射
- python - 如何将键和值(列表)附加到新字典?