Как обновить объект с помощью оператора распространения - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь обновить объект, используя распространенный объект, но не могу правильно его обновить.Вот результат, который я хочу получить в первом случае переключателя:

{
  code: {
    loading: true
  }
}

А во втором случае переключателя это то, что я хочу:

{
  code : {
    loading: false,
    data: {
      some data here
    }
  }
}
const downloadData = (state = {}, action) => {
    switch (action.type) {
        case LOADING: {
            const {code, loading} = action.payload
            return {
                ...state,
                [code]: {
                    ...[code], loading
                }
            }
        }

        case LOADED: {
            const {code, loading, data} = action.payload
            return {
                ...state,
                [code] : {
                    loading, data, ...[code]
                }
            }
        }

        default: 
            return state
    }
}

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Предполагая, что у вас есть начальное состояние

const initialState = {
  code: {
    loading: false,
    data: {}
  }
};

Для первого случая попробуйте:

{
  ...state,
  code: {
    ...state.code,
    loading: true
  }
}

Для второго случая:

{
  ...state,
      code: {
        ...state.code,
        loading: false,
        data: {
              some data here
              }
      }    
}
0 голосов
/ 27 июня 2019

Я думаю, что ваш второй случай должен быть:

case LOADED: {
    const {code, loading, data} = action.payload
    return {
        ...state,
        code : {
            ...code,
            loading:false,
            data: {some data here}
        }
    }
}

Поскольку loading и data будут перезаписывать ...[code]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...