JS REDUX STORE Я хочу добавить объект в массив объектов, который вложен в определенный объект c в массиве - PullRequest
0 голосов
/ 08 мая 2020

В моем приложении есть страница сведений с комментариями под продуктом. Пользователь может отреагировать на комментарий смайликом. В настоящее время мой магазин Redux выглядит так:

Details: {
ratings: [ {} ],
comments: [ 
{ 
  id: 1,
  comment: 'text',
      reactions: [{
         id: 1,
         emoji: ':)',
         userId: 2
      }, {...}]

}, {...} ]
}

Когда пользователь выбирает смайлик для реакции на комментарий, я отправляю действие в BE, реакция сохраняется, отвечает FE объектом newReaction. Я хочу добавить объект newReaction в массив реакций выше для указанного c commentId. Ниже представлена ​​сокращенная версия моего редуктора:

const initialState = {};

export default (state = initialState, action) => {
  switch (action.type) {
    case BOOK_DETAILS_SUCCESS:
      return { ...action.payload };

    case REACTION_POST_SUCCESS:
      return {
        ...state,
        comments: [...state.comments, action.payload],
      };

    default:
      return state;
  }
};

Я не могу понять, как настроить таргетинг на указанный объект c commentId в массиве комментариев. А затем добавьте к нему объект newReaction.

1 Ответ

0 голосов
/ 08 мая 2020

, поскольку состояние неизменяемо, вам необходимо его глубоко скопировать, изменить и вернуть.

возможно что-то вроде: let nextState = {... state} nextState.comments = [... state.comments] ; // это очень важно для того, чтобы вы могли изменять встроенные объекты / массив.

// теперь измените nextState и обновите его новым Obj, содержащим новый Emoji

return nextState;

надеюсь, это поможет! дайте мне знать, если что-то из этого не имеет смысла.

...