Я хочу добавить сообщение в массив сообщений в редьюсере. Обычно я бы просто сделал это:
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])
Но нет радости
да пробовал, не знаю что не так делаю



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, что state.merge() и concat() могли бы работать здесь:
case CREATE_NEW_POST_SUCCESS: {
return state.merge({
fetchingPosts: false,
posts: state.get('posts').concat(action.payload),
postError: null,
})
}
Вы можете использовать updateIn аналогично ответу здесь.
case CREATE_NEW_POST_SUCCESS: {
return state
.set('fetchingPosts', false)
.updateIn(['posts'], posts => posts.push(action.payload))
.set('postsError', null);
это выглядит идеально, спасибо. Все еще не могу заставить его работать по какой-то причине. Я буду продолжать искать, что я делаю неправильно.
А вы пробовали это сделать
.set('posts', [...state.posts, ...action.payload])? Или с помощью методаmergeдобавлять в посты?