为了账号安全,请及时绑定邮箱和手机立即绑定

将 React Context 恢复到默认状态

将 React Context 恢复到默认状态

牛魔王的故事 2021-11-04 15:24:31
我有一个 React Context 的默认状态,如下所示:export const defaultState: UsersState = {  isModalOpen: false,  isCancelRequest: false,  companyId: 0,  users: []};当它使用的模式被取消时,我想将状态清除回默认值。这有效:    case RESET_STATE: {      return {        ...state,        isModalOpen: false,        isCancelRequest: false,        companyId: 0,        users: []      };    }但这不会:    case RESET_STATE: {      return {        state: defaultState      };    }当上下文第一次被实例化时,这就是用户的样子:users: Array[0]但是当我使用后者的简化方法来重置状态时,它看起来像这样:users: Array  (empty)至少,这就是我在 React DevTools 中看到的。为什么设置state为defaultState不恢复users为Array[0]?
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

这个


case RESET_STATE: {

      return {

        state: defaultState

      };

    }

应该:


case RESET_STATE: {

      return {

       ...defaultState

      };

    }

state在您的上下文中没有调用对象


查看完整回答
反对 回复 2021-11-04
?
潇湘沐

TA贡献1816条经验 获得超6个赞

使用defaultState代替{state: defaultState}


像这样。


    case RESET_STATE: {

      return defaultState;

    }

教程


const state = {

    isModalOpen: true,

    isCancelRequest: true,

    companyId: 123,

    users: ['1','2','3']

};


const defaultState: UsersState = {

  isModalOpen: false,

  isCancelRequest: false,

  companyId: 0,

  users: []

};


const getState1 = () => {

  return {

    ...state,

    isModalOpen: false,

    isCancelRequest: false,

    companyId: 0,

    users: []

  };

}


const getState2 = () => {

  return {

    state: defaultState

  };

}


const getState3 = () => {

  return defaultState;

}


console.log('this is goal state: ', getState1());

console.log('this is your state: ', getState2());

console.log('this is my state: ', getState3());


查看完整回答
反对 回复 2021-11-04
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信