【发布时间】:2019-08-14 02:57:42
【问题描述】:
我正在使用react-apollo 通过<Query /> 和<Mutation /> 获取数据。
因此,当我得到一些数据时,我想setState。我在渲染方法中获取数据。
像这样:
render() {
return (
<Query query={CAN_UPDATE_POST_QUERY} variables={{ id: this.props.router.query.postId }}>
{ payload => {
if(payload.loading) {
<div style={{width: '98%', textAlign: 'center', maxWidth: '1000px', margin: '50px auto'}}>Loading...</div>
}
if(this.isNew()){
return (
<PleaseSignIn>
{ me => (
...something
) }
</PleaseSignIn>
)
} else if (payload.data && payload.data.canUpdatePost) {
// I get payload here. Here's where I want to set new state.
this.canUpdatePost = payload.data.canUpdatePost
this.setState({ canUpdatePost: this.canUpdatePost })
return (
<PleaseSignIn>
{ me => (
...something
) }
</PleaseSignIn>
)
} else {
return (
<div style={{width: '98%', textAlign: 'center', maxWidth: '1000px', margin: '50px auto'}}>You and your mind seems to be lost. ????</div>
)
}
} }
</Query>
)
}
在渲染中使用 setState 会给我这个错误:
Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.
我如何以 React 方式思考?特别是,当我从react-apollo 获取有效负载时,如何更改我的状态?
这里是新手。对不起,如果愚蠢。
提前致谢。 :-)
【问题讨论】:
-
组件可能会随着每次状态更改而重新渲染,并在每次导致进一步渲染时更新状态。
-
你根本没有使用 canUpdatePost。
-
我正在使用 canUpdatePost,只是我已经删除了该代码。
-
您需要提供stackoverflow.com/help/mcve,并且不要剥离相关部分。
标签: javascript reactjs graphql react-apollo next.js