javascript - 错误:重新渲染过多。对后端的帖子做出反应
问题描述
export default function CRouter() {
const [token, setToken] = useLocalStorage('auth', '')
const [user, setUser] = useState(false);
const GetUser = () => {
if (token !== "" && !user) {
axios.post('/auth/getUser', { token }).then(res => {
if (res.status === 200) {
setUser(res.data);
} else {
setToken('');
setUser(false);
//mandarlo al login
}
})
}
}
useEffect(() => {
GetUser()
}, [user])
return (
<Router>
<NavBar user={user}></NavBar>
<Switch>
<Route
exact
path="/auth/login"
render={(props) => (
<Login user={user}></Login>
)}
>
</Route>
</Switch>
</Router>
);
}
//Error: Too many re-renders.
22 | if (token !== "" && !user) {
23 | axios.post('/auth/getUser', { token }).then(res => {
24 | if (res.status === 200) {
> 25 | setUser(res.data);
26 | } else {
27 | setToken('');
28 | setUser(false);
这是错误,我之前做过这个并且工作过,我如何查看循环从哪里开始任何建议?因为在发布后用户是真实的并且它没有进入循环所以我不知道为什么会发生
解决方案
由于错误使用钩子而出现错误。
useEffect(() => {
GetUser()
}, [user])
这里GetUser
会一直调用user
更改,因为您添加了依赖项[user]
。现在,GetUser
将使用setUser
更改user
。所以,这是一种递归,哪里GetUser
会改变user
,什么时候user
会GetUser
被调用。
修理
useEffect(() => {
GetUser()
}, []) // remove user
推荐阅读
- liferay - liferay 错误未显示 portlet
- visual-studio - 找不到类型“名称” - Xamarin
- javascript - 如何在文本框中添加计算进度条?
- android - React Native:运行android应用程序时出错
- android - 我想知道如何正确使用连接Expandable List View的适配器和同时连接gridView的适配器
- node.js - 如何使用 Azure AD 保护 node.js Web api 并使用 React.js 前端使用它
- java - Android 视频播放器 mkv 视频支持
- php - PHP - 在 1 次操作中将文本连接到 2 个变量
- reactjs - React js构建更改css文件中的路径
- laravel - 存储为 id 时搜索列名