Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.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 React组件用户未处于状态_Javascript_Reactjs_React Redux - Fatal编程技术网

Javascript React组件用户未处于状态

Javascript React组件用户未处于状态,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,考虑以下几点: componentDidMount(){ this.props.requestUser(this.props.match.params.userID).then(res => { this.pageOwner = res.user; debugger; }) } 为什么我的this.pageOwner仍返回未定义?我一直在尝试关闭as以使用户进入我的用户配置文件可以实际访问的状态。如果您试图访问this.

考虑以下几点:

 componentDidMount(){
    this.props.requestUser(this.props.match.params.userID).then(res => 
      {
        this.pageOwner = res.user;
      debugger;
     })

  }

为什么我的this.pageOwner仍返回未定义?我一直在尝试关闭as以使用户进入我的用户配置文件可以实际访问的状态。

如果您试图访问
this.pageOwner
,则需要在
this.props.requestUser()
异步函数完成后执行此操作。您当前正在
componentDidMount()
中获取用户,因此您的
render()
最初会将
this.pageOwner
视为
undefined
,直到异步调用完成


此外,最好将异步调用的结果存储在
状态
中,以便在填充值后组件将重新渲染

正如@colin所说,把它放在
这个.state中。如果在
render()
函数中出现错误,请按如下方式进行渲染:

constructor() {
 super();
 this.state = {
   pageOwner: null
 }
}

componentDidMount() {
 this.props.requestUser(this.props.match.params.userID).then(res => 
 {
  this.setState({pageOwner: res.user});
  debugger;
 })
}

render() {
 if(this.state.pageOwner) 
   return ( ... )
 else 
   return null;
}

匿名箭头函数中的
这个
是什么?但这不是一个状态,它是一个异步操作,因此只有当您的请求完成时,它才会出现(所以很可能在第一次渲染之后)。如果要处理此问题,请确保在尝试呈现其属性之前检查pageOwner是否为空。此外,只有
this.setState
会导致组件重新加载(或道具更改)),现在,没有任何东西会导致组件重新加载。您在哪里尝试访问
this.pageOwner
?在控制台后它是否未定义。将其记录在回调函数或其他地方,可能是
render()中
?当我使用chrome控制台时,它是未定义的。除非其他东西触发重新渲染,否则它不总是返回
null
?是的,你是对的,我根据你所说的编辑了我的答案。development.js:512警告:不能对未安装的组件调用setState(或forceUpdate)。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消componentWillUnmount方法中的所有订阅和异步任务。我猜这是因为arrow语法函数。在调用
this.props.requestUser
函数之前,尝试
(函数(res){…})
而不是
(res=>{…})
,或者在调用
this.props.requestUser
函数之前,将
this
保存在变量中,比如
var component=this
,然后在回调调用
component.setState({…})
那会是什么样子?会是什么样子?