Состояние не инициализируется в исходное состояние - PullRequest
0 голосов
/ 07 декабря 2018

Я новичок в react-redux.

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

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
}

Но потом я попытался с object.assign.

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

Но все же здесь он копирует только первый уровень переменных.

Итак, я все еще не могу этого сделать.

Может ли кто-нибудь помочь мне с этим?

Ответы [ 4 ]

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

Это неправильно:

case RESET_SETUP_QUIZ: {
        console.log("intial state is ",  ...state);
        return {
            initialState
        }

Вы должны

case RESET_SETUP_QUIZ: {
        console.log("intial state is ", initialState);
        return initialState;

Или

 case RESET_SETUP_QUIZ: {
        console.log("intial state is ", initialState);
        return {
           ...initialState
        };
0 голосов
/ 07 декабря 2018

Для сброса в исходное состояние все, что вам нужно сделать, это:

case RESET_SETUP_QUIZ: {
    return initialState;

Вот и все.Когда функция редуктора вызывается после первого раза, state будет текущим состоянием, а не начальным состоянием.

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

Обратите внимание, что вы ничего не возвращаете для условия по умолчанию action.type.Вернуть состояние на default:.Во-вторых, return { ...state, low: action.data, error: false } должен работать прямо из коробки.

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
            }
        }
        default: {
            return state;
        }
    }
}
0 голосов
/ 07 декабря 2018

Object.assign не поможет с глубокой копией.

Если вы хотите использовать глубокую копию.

let newObj = JSON.parse(JSON.stringify(obj));

здесь newObj будет глубокой копией.

...