Редуктор редуктор с неизменяемым - PullRequest
1 голос
/ 01 апреля 2019

Я хочу добавить сообщение в массив сообщений в редукторе.Обычно я просто делаю это:

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);

При этом весь массив сообщений перезаписывается только одним объектом сообщения.Я пробовал много вещей, таких как

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

Но без радости

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Вы можете использовать updateIn аналогично ответу здесь .

case CREATE_NEW_POST_SUCCESS: {
    return state
        .set('fetchingPosts', false)
        .updateIn(['posts'], posts => posts.push(action.payload))
        .set('postsError', null);
0 голосов
/ 01 апреля 2019

Я думаю, state.merge() и concat() могли бы работать здесь:

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