Обновить состояние редуктора в редукторе, имеющем массив объектов - PullRequest
0 голосов
/ 06 декабря 2018

Я новичок в реаги-редуксе.

У меня есть объект, который похож на

 const initialState = {
        Low: [
            {
                id: 0,
                technologyId: 0,
                technology: '',
                level: 'EASY'
            }
        ],
        Medium: [
            {
                id: 0,
                technologyId: 0,
                technology: '',
                level: 'MEDIUM'
            }
        ],
        High: [
            {
                id: 0,
                technologyId: 0,
                technology: '',
                level: 'TOUGH'
            }
        ]
    }

Now, 

    export default function QuizData(state = initialState, action) {
        switch (action.type) {
            case QUIZ_DATA:
                return {
                    ...state,
                    Low: action.data,
                    error: false,
                } 
            case RESET_SETUP_QUIZ: {
            console.log("intial state is ",  ...state);
            return {
                ...state
            }

Теперь, что происходит после некоторых манипуляций, этот объект получает измененияс каждым ключом имеет некоторые значения.например,

{
        Low: [
            {
                id: 0,
                technologyId: 11,
                technology: 'xsxs',
                level: 'EASY'
            }
        ],
        Medium: [
            {
                id: 0,
                technologyId: 22,
                technology: 'swwsw',
                level: 'MEDIUM'
            }
        ],
        High: [
            {
                id: 0,
                technologyId: 110,
                technology: 'xsxsx',
                level: 'TOUGH'
            }
        ]
    }

Итак, это изменилось. Теперь я хочу сделать следующее:

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

Так что он не будет иметь никаких значений, поскольку он должен быть таким же, как по умолчанию.

ТАК, что я пробовал

return {
   initalState
}

Но здесь начальное состояниетакже с теми же значениями.

Итак, я не могу добраться до начального уровня.

Можно ли мне помочь с этим?

1 Ответ

0 голосов
/ 06 декабря 2018

Поскольку вы используете исходный объект состояния и возвращаете его модифицированную версию (то есть вы воздействуете на свой initialState).

Вы должны создать копию состояния в вашем редукторе, например

case QUIZ_DATA:
  return Object.assign(
    {},
    state,
    {
      Low: action.data,
      error: false
    }
  )
case RESET_SETUP_QUIZ: {
  return Object.assign(
    {},
    state
  )
}

У вас есть специальные библиотеки, такие как immutablejs, чтобы справиться с этим (https://redux.js.org/recipes/usingimmutablejs)

...