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({…})
那会是什么样子?会是什么样子?