@EmKotlety

Как иммутабельно изменить свойство вложенного объекта?

как сделать глубокое копирование state: Нужно у определенного типа у определенного юзера поменять поле даты:
const initialState = {
briefingType:  
    [{type: 'elevation', users: [
        {userid : '1', userName: 'vasia', date: 'thursday'},
        {userid: '2' ,userName: 'ivan', date: 'monday'},
        {userid: '3' ,userName: 'petro', date: 'false'},

    ] }
    ,
    {type: 'tools', 
            users: [
              {userid : '1', userName: 'vasia', date: 'sunday'},
              {userid: '2' , userName: 'ivan', date: 'false'},
              {userid: '3' , userName: 'petro', date: 'monday'},
            ]  
    },

],
loading: false,

}
export default function briefingReducer (state = initialState, action) {
    switch(action.type){
        case SETTYPE:
            return{
                ...state, 
                loading: true,
                briefingType:[...state.briefingType,
                state.briefingType.find((el) => el.type=== action.payload.type)
                .
                ]///////???????
            }

без редакса эта функция выглядит так:
const addBriedingDate = function(briefingType, type, userName, date){
  briefingType.find((el) => el.type===type).users.find((u)=>u.userName===userName).date = date
  return briefingType
}
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
0xD34F
@0xD34F
return {
  ...state,
  briefingType: state.briefingType.map(n => n.type === action.payload.type
    ? {
        ...n,
        users: n.users.map(m => m.userName === action.payload.userName
          ? {
              ...m,
              date: action.payload.date,
            }
          : m
        ),
      }
    : n
  ),
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы