【发布时间】:2018-10-04 06:00:03
【问题描述】:
我正在构建一个 React 组件,用于列出用户当天发布的所有帖子。我有两个动作创建者和减速者:
-
fetchUserList()是一个动作创建者,它获取所有用户的列表并被减速器状态this.props.userList捕获 -
fetchPosts(userId)是一个动作创建者,它接受userId作为参数并获取今天发布的帖子。这被减速器状态this.props.postsList捕获
组件看起来像这样:
class PostList extends Component {
componentDidMount() {
this.props.fetchUserList();
}
renderPosts = () => {
this.props.userList.forEach(user => {
this.props.fetchUsers(user._id);
});
this.setState({
renderedPosts: true
});
};
render() {
return (
<div>
{this.props.userList.length > 0 && !this.state.renderedPosts ? this.renderPosts() : ""}
</div>
);
}
当 React 尝试渲染这个组件时,它会报错:
警告:在现有状态转换期间无法更新(例如在
render或其他组件的构造函数中)。渲染方法应该是 props 和 state 的纯函数;构造函数副作用是一种反模式,但可以移至componentWillMount。
我尝试使用其他 React 生命周期方法,例如 ComponentWillUpdate(),并从那里调用操作而不是 render() 方法,但无济于事。
处理这种模式的最佳方法是什么?
【问题讨论】:
-
this.props.fetchUserList.forEach这有效吗?不应该是this.props.userList.forEach? -
您是否尝试移至
componentWillMount()? -
@Prajwal 抱歉在复制粘贴代码时出现拼写错误
-
为什么不去掉 renderPost 状态,只用一个纯组件来渲染帖子呢?这样它只会在更改时重新渲染。还可以尝试 fetchTodaysPostForUsers(userid_list) 操作,这样状态只会在所有结果可用后更新,我假设 fetch 在这里是异步的。
标签: reactjs redux redux-thunk