带有不可变的Redux减速器

时间:2019-04-01 10:40:32

标签: javascript reactjs react-redux redux-saga immutable.js

我想将一个帖子添加到化简器中的帖子数组中。 通常我会这样做:

CREATE_NEW__POST_SUCCESS: {
    return {
        ...state,
        fetchingPosts: false,
        error: null,
        posts: [...state.posts, ...action.payload],
        };

但是我当前的项目要求我使用Immutable.js 使用Immutable,状态可以通过.set()或.merge()或.update()

设置
case CREATE_NEW_POST_SUCCESS: {
    return state
        .set('fetchingPosts', false)
        .set('posts', action.payload)
        .set('postsError', null);

这仅用一个post对象覆盖了整个数组数组。 我尝试了很多类似

 .set('posts' ,[...state.posts, ...action.payload])

但没有喜悦

2 个答案:

答案 0 :(得分:1)

您可以使用updateIn类似于答案here

case CREATE_NEW_POST_SUCCESS: {
    return state
        .set('fetchingPosts', false)
        .updateIn(['posts'], posts => posts.push(action.payload))
        .set('postsError', null);

答案 1 :(得分:0)

我认为state.merge()concat()在这里可以工作:

case CREATE_NEW_POST_SUCCESS: {
    return state.merge({
        fetchingPosts: false,
        posts: state.get('posts').concat(action.payload),
        postError: null,
    })
}