我试图在React中更新对象的一部分并设置状态。我有它的工作,但似乎我正在以完全错误的方式去做。
我有一个状态的对象,在组件安装时设置。我有一个使用对象选定属性的复选框。基本上单击此复选框我想设置状态并切换属性。我正在做的post.selected = !post.selected
。
当我想更新状态以反映这种变化时,困难就出现了,我正在浏览整个原始对象,寻找帖子。更新帖子然后更新状态。这真的是必须要做的吗?或者我可以直接更新此值并在设置状态函数中将其作为目标吗?
onItemClick(post, is_active = true) {
const posts = this.state.posts;
let postType = is_active ? 'active' : 'not-active';
const parentCategory = posts.find(statePosts => {
return posts[postType].id === post.id;
});
const foundPost = parentCategory[postType].find(selectedPost => selectedPost.id === post.id);
foundPost.selected = !foundPost.selected;
this.setState({posts: posts});
}
这样做似乎有点长,这样做我想要做的就是更新状态中的一个对象。
获取帖子:
componentWillReceiveProps(props) {
this.setState({posts: props.posts});
}
帖子循环:
{
posts.active.map((post) => {
return (
<View key={post.id}>
<CheckBox
checkBoxColor={"green"}
checkedCheckBoxColor={"blue"}
onClick={() => {
this.onItemClick(post)
}}
isChecked={post.selected}
rightText={post.description} />
</View>
)
})
}
存储你的帖子,使得id是关键,post是对象。然后在更新时执行类似posts.active = {... posts.active,... post};
使用带有新post对象的spread运算符来更新posts对象。