Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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 设置状态不工作后,将值作为道具传递_Javascript_Reactjs_Components_State - Fatal编程技术网

Javascript 设置状态不工作后,将值作为道具传递

Javascript 设置状态不工作后,将值作为道具传递,javascript,reactjs,components,state,Javascript,Reactjs,Components,State,当用户点击打开时,我试图通过一个道具将一个对象传递给一个模态。我正在从单击的行接收值,但我的模式无法从this.props读取值,并且我得到了一个未定义的值。我正在正确设置状态值并将其传递给模态组件 模式呼叫 <Modal toggleModal={this.toggleModal} show={this.state.isOpen} onClose={this.toggleModal} user={this.state.user} /> 在模态组件的渲染部分内部

当用户点击打开时,我试图通过一个道具将一个对象传递给一个模态。我正在从单击的行接收值,但我的模式无法从
this.props
读取值,并且我得到了一个未定义的值。我正在正确设置状态值并将其传递给模态组件

模式呼叫

<Modal toggleModal={this.toggleModal} show={this.state.isOpen}
          onClose={this.toggleModal} user={this.state.user} />
在模态组件的渲染部分内部

if (this.props.user === null) {
  userFound = 'Not found'
}
console.log(this.props.user);
当在模态组件内部时,我得到未定义的。在这之前的任何地方,我都会得到用户对象


谢谢

在您的组件中,您只是在检查null而不是
未定义的
,如果您想检查未定义的,其中一种方法是使用
typeof

用户类型!==“未定义”

因此,它将是这样的(如果您想同时检查两个或一个,您可以相应地对其进行ammend):

如果

toggleModal = (user) => {
    if (typeof user !== "undefined" && user !== null) {
      this.setState({
        isOpen: !this.state.isOpen,
        user: user
     })
    }
}

setState()
完成后尝试
forceUpdate()
this.setState({isOpen:!this.state.isOpen,user:userData},()=>{console.log('user data changed');this.forceUpdate();})
您只检查未定义的
user=undefined
,因为
null!==undefined
为true,请在toggleModal方法内执行
console.log(用户)
并检查值。感谢您指出错误。当我将值传递给模态组件时,我仍然会得到一个未定义的错误。这一部分很有帮助,但是在模态组件内部,我仍然会得到一个未定义的错误,好像
This.props.user
在应该有用户对象时失败。这是因为当setState是异步操作时,当用户数据按此线程上的建议设置时,能否显示初始化状态的位置,即
this.state={}
我正在调用forceUpdate()。在App.js内部,我有
constructor(props){super(props)this.state={isOpen:false,数据类型:'user',user:{}}this.changeSearchState=this.changeSearchState.bind(this);}
如果我只是使用props值,我是否需要在模态组件上有一个状态?当我从App.js->中获取.log时,我可以看到用户对象,但当从模态组件中调用
this.props.user
时,它会返回到未定义状态。在您的模态组件中,你能把这个.props.log
记录下来,看看你的道具接线是否正确吗?如果可能的话,你能用整个模态组件来更新你的代码,而不仅仅是
toggleModal
toggleModal = (user) => {
  var userData = {};
  if (typeof user !== "undefined" && user !== null) {
  userData = user
}
toggleModal = (user) => {
    if (typeof user !== "undefined" && user !== null) {
      this.setState({
        isOpen: !this.state.isOpen,
        user: user
     })
    }
}