【发布时间】:2018-09-19 21:10:07
【问题描述】:
使用旧方法:
graphql(GET_PROJECTS_BY_USER_ID, {
options: ownProps => ({
skip: !ownProps.loggedUser.id,
}),
props: ({ data }) => {
return data;
},
});
我可以捕获 componentWillReceiveProps 生命周期内的项目列表并在那里调度 redux 操作:
componentWillReceiveProps(nextProps) {
if (!nextProps.loading && this.props.loading) {
this.props.setProjects(nextProps.getProjects);
}
}
现在我正在尝试 Apollo 的 <Query/> 组件,但我不知道如何正确调度操作:
render() {
return (
<Query
query={GET_PROJECTS_BY_USER_ID}
skip={!this.props.loggedUserId}
>
{({ loading, data: { getProjects: projects } }) => {
if (loading) return 'Loading ...';
this.props.setProjects(projects); // no good
// return projects
}}
</Query>
);
}
这将导致以下警告:
在现有状态转换期间无法更新(例如在
render或其他组件的构造函数中)。渲染方法应该是 props 和 state 的纯函数;构造函数副作用是一种反模式,但可以移至componentWillMount。
问题是使用<Query>,componentWillMount` 将不再被调用。
【问题讨论】:
标签: reactjs redux apollo react-apollo