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

问题描述 投票:0回答:2

我试图在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>
    )
})

}

javascript reactjs
2个回答
1
投票

存储你的帖子,使得id是关键,post是对象。然后在更新时执行类似posts.active = {... posts.active,... post};


0
投票

使用带有新post对象的spread运算符来更新posts对象。

© www.soinside.com 2019 - 2024. All rights reserved.