Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 缩小反应误差#301 |无限循环|重新渲染 import React,{createContext,useState}来自“React”; export const UserContext=createContext(); export const UserProvider=props=>{ const[user,setUser]=useState({ 记录:false, 用户信息:{ } }) if(localStorage.getItem('data')) { setUser({logged:true,User_info:JSON.parse(localStorage.getItem('data'))}) console.log(user.user\u信息) } 返回( {props.children} ) }_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 缩小反应误差#301 |无限循环|重新渲染 import React,{createContext,useState}来自“React”; export const UserContext=createContext(); export const UserProvider=props=>{ const[user,setUser]=useState({ 记录:false, 用户信息:{ } }) if(localStorage.getItem('data')) { setUser({logged:true,User_info:JSON.parse(localStorage.getItem('data'))}) console.log(user.user\u信息) } 返回( {props.children} ) }

Javascript 缩小反应误差#301 |无限循环|重新渲染 import React,{createContext,useState}来自“React”; export const UserContext=createContext(); export const UserProvider=props=>{ const[user,setUser]=useState({ 记录:false, 用户信息:{ } }) if(localStorage.getItem('data')) { setUser({logged:true,User_info:JSON.parse(localStorage.getItem('data'))}) console.log(user.user\u信息) } 返回( {props.children} ) },javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我的组件正在无限循环中重新渲染,react限制了重新渲染及其抛出错误 有人能帮忙吗???我可能会把这句话改成: import React,{createContext,useState} from 'react'; export const UserContext = createContext(); export const UserProvider = props =>{ const [ user,setUser ] = useState({ logged:

我的组件正在无限循环中重新渲染,react限制了重新渲染及其抛出错误
有人能帮忙吗???

我可能会把这句话改成:

import React,{createContext,useState} from 'react';

export const UserContext = createContext();
export const UserProvider = props =>{
    const [ user,setUser ] = useState({
        logged: false,
        User_info: {
        }
    })
    if(localStorage.getItem('data'))
        {
        setUser({logged:true,User_info:JSON.parse(localStorage.getItem('data'))})
        console.log(user.User_info)
    }
    return(
        <UserContext.Provider value={[ user,setUser ] }>
            { props.children } 
        </UserContext.Provider>
    )
}
更新:

调用
setState()
时,将重新渲染组件。您的原始代码正在运行setState(),始终导致无限渲染:

  • 第一次渲染
  • 调用setState(),以便新的重新渲染将排队
  • 再次渲染,调用setState,排队重新渲染
  • 再次渲染,调用setState,排队重新渲染
  • 再次渲染,调用setState,排队重新渲染

@LaxmanGupta更新了我的答案,解释了无限渲染
-if(localStorage.getItem('data'))
+if(!user.logged && localStorage.getItem('data'))