状态未初始化为初始状态

时间:2018-12-07 04:33:09

标签: javascript reactjs redux react-redux reducers

我是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 :(得分:1)

Object.assign将无法进行深层复制。

如果要进行深拷贝使用。

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

这里newObj将是深层副本。

答案 1 :(得分:1)

要重置为初始状态,您需要做的是:

case RESET_SETUP_QUIZ: {
    return initialState;

就是这样。第一次调用reducer函数时,state将是当前状态,而不是初始状态。

答案 2 :(得分:1)

请注意,对于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;
        }
    }
}

答案 3 :(得分:1)

这是错误的:

allNum= as.numeric(sub("%", "", df))

您应该

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

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