我目前正在学习React,但我遇到了这个错误
错误:重新渲染太多。 React限制渲染的次数以防止无限循环。
这是代码:
const [Status, setStatus] = useState(false);
if (sessionStorage.getItem("token")) {
setStatus(true);
}```
useEffect
钩子来在首次加载时将本地状态设置为令牌值。以下是文档:
https://reactjs.org/docs/hooks-effect.html
在您的情况下,您将需要替换:if (sessionStorage.getItem("token")) {
setStatus(true);
}
由:
useEffect(() => {
if (sessionStorage.getItem("token")) {
setStatus(true);
}
}, [])
useEffect
。setStatus
触发重新渲染,由于 sessionStorage
没有改变,因此 if 条件仍然为真。因此您会无限地进行渲染,并且 React 将使用您发布的错误消息中止。
您应该使用一个只在 session storage 改变时触发的 useEffect
。像这样:
const token = sessionStorage.getItem("token");
useEffect(() => {
setStatus(token !== undefined);
}, [token]);
或者将依赖项数组留空,仅在组件挂载时执行该 effect 一次。
useEffect(() => {
if (sessionStorage.getItem("token")) {
setStatus(true);
}
}, []);