反应|更新对象的一部分并设置状态

时间:2018-11-23 16:52:12

标签: javascript reactjs

我试图在React中更新对象的一部分并设置状态。我已经启用了它,但似乎我正在以完全错误的方式进行操作。

我有一个处于安装组件时设置的状态的对象。我有一个复选框,它使用对象的selected属性。本质上,单击此复选框,我想设置状态并切换属性。 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>
    )
})

}

2 个答案:

答案 0 :(得分:1)

存储您的帖子,以id为键,而post为对象。然后在更新时执行诸如posts.active = {... posts.active,... post};

答案 1 :(得分:0)

使用带有新发布对象的传播算子来更新发布对象。