使用object.assing

时间:2017-11-01 09:23:34

标签: reactjs react-redux

我有一个React / Redux应用程序,它接收来自服务器的帖子。到目前为止,我在我的reducer中得到了RECEIVE_POSTS,如下所示:

function posts(
    state = {
        items: []
    },
    action
) {
    switch (action.type) {
        case RECEIVE_POSTS:
            return Object.assign({}, state, {
                items: action.posts,
            })
        case ADD_POST:
        default:
            return state
    }
}

现在对于其他情况,我正在努力使用Object.assign语法。如何在ADD_POST情况下更新状态,其中action.post中包含的新创建的帖子将附加到现有项目?

2 个答案:

答案 0 :(得分:2)

假设CREATE_POST根据接收的帖子数据引用ADD_POST,它将如下所示:

case CREATE_POST:
  return {...state, items: state.items.concat(action.post)};

无需使用对象分配,因为您可以使用您所在州的现有帖子concat发帖。提醒一下,concat不会改变状态,它会返回一个添加了post的新数组。

答案 1 :(得分:1)

这是假设正在传递数组中的单个帖子

function posts(
    state = {
        items: []
    },
    action
) {
    switch (action.type) {
        case RECEIVE_POSTS:
            return Object.assign({}, state, {
                items: action.posts,
            })
        case CREATE_POST:
            return Object.assign({}, state, {
                items: [...state.items, ...action.post]
            })
        default:
            return state
    }
}