Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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
Reactjs React Uncaught TypeError:无法读取未定义的属性x_Reactjs_Use Effect_Use State - Fatal编程技术网

Reactjs React Uncaught TypeError:无法读取未定义的属性x

Reactjs React Uncaught TypeError:无法读取未定义的属性x,reactjs,use-effect,use-state,Reactjs,Use Effect,Use State,我有一个组件,它通过react router Link组件从父组件获取数据作为道具,如下所示: <Link to={{pathname: "/cv", state:cvData }}>Next</Link> const [cvData, setCvData] = useState(props.state) useEffect(() => { setCvData(props.cvData) console.log(cvData)

我有一个组件,它通过react router Link组件从父组件获取数据作为道具,如下所示:

<Link to={{pathname: "/cv", state:cvData }}>Next</Link>
const [cvData, setCvData] = useState(props.state)
useEffect(() => {
    setCvData(props.cvData)
    console.log(cvData)
}, [])

该console.log的输出首先是未定义的,然后是数据。但是,即使JSX部件记录了正确的数据,它也会抛出“无法读取未定义的属性x”的错误。

这是因为在开始时的某个点上,您的数据首先未定义,您可以在使用它之前添加一个简单的检查条件,例如:

return(
  <div>
    { cvData && cvData.x ? <div>display your cvData</div> : null }
  </div>
)
返回(
{cvData&&cvData.x?显示您的cvData:null}
)
默认情况下,
useffect()。设置状态将触发React以重新渲染,但在重新渲染之前,它将更新DOM并记住状态变量值,并在重新渲染后使用它

在第一次渲染过程中,您的
道具状态未定义

在第一次渲染之后,
useffect()
将运行,它将设置状态并记住它。在效果中有
console.log
,它将打印未定义的状态

现在,React将更新DOM,当您尝试访问未定义状态时,它将抛出一个错误“无法读取未定义的属性x”

在我看来,我们不应该在useEffect中使用
setState

请阅读