Javascript React Redux不会重置某些组件的存储

Javascript React Redux不会重置某些组件的存储,javascript,reactjs,redux,jsx,Javascript,Reactjs,Redux,Jsx,我的redux商店有一个奇怪的问题: 我可以在我的应用程序中设置它,但我想在注销时将其重置为组件初始状态。 在这个特定的组件上似乎没有任何东西起作用。在其他组件中,根减速器方法有效。这是一个相对较大的项目,但我非常确定,我的组件逻辑与工作组件相同 减速器看起来像这样: const initialState={ myList:[ { 键:“ListKey1”, 格式:[], 所选格式:“”, 打印机:{}, }, { 键:“ListKey2”, 活动:错误, 格式:[], 所选格式:“”, 打印机

我的redux商店有一个奇怪的问题: 我可以在我的应用程序中设置它,但我想在注销时将其重置为组件初始状态。 在这个特定的组件上似乎没有任何东西起作用。在其他组件中,根减速器方法有效。这是一个相对较大的项目,但我非常确定,我的组件逻辑与工作组件相同

减速器看起来像这样:

const initialState={
myList:[
{
键:“ListKey1”,
格式:[],
所选格式:“”,
打印机:{},
},
{
键:“ListKey2”,
活动:错误,
格式:[],
所选格式:“”,
打印机:{},
},
{
键:“ListKey3”,
活动:错误,
格式:[],
所选格式:“”,
打印机:{},
},
],
};
导出默认函数myReducer(状态=初始状态,操作){
开关(动作类型){
...
...
违约:
返回状态;
}
}
我尝试了rootReducer方法:

constrootreducer=(状态、操作)=>{
如果(action.type==='LOGOUT'){
返回通知者(未定义,动作);
}
返回通知者(状态、动作);
};
这似乎与初始状态无关

我还尝试了“老式”的方式,通过在减速机中捕捉注销案例。 这也没什么用

。。。
“注销”案例:
返回初始状态;
违约:
返回状态;
...
当我用空数组替换initialState时,它将工作/覆盖该状态

。。。
“注销”案例:
返回[];
违约:
返回状态;
...
但这当然不适合我的应用程序

也许这里的任何人都能帮上忙,你是我最后的选择,谷歌搜索帮不了多少忙。 干杯D

更新: 这是我的
MapStateTrops

const-mapStateToProps=(state)=>({
selectedList:state.settings.myList,
});

只有当您对数据有不同的引用时,组件才会重新加载。e、 g.初始值将在开始时设置,然后如果将存储值再次设置为初始值,即相同的对象,则不会重新提交组件。您只需要更新引用

case 'LOGOUT':
   return { myList: [...initialState.myList ] };
default:
   return state;
解决方案: 细看 听了别人的话,我意识到我的selectedList设置程序可能正在改变状态:

handleFormatSelect = (format, index) => {
    const { myList, updateMyList} = this.props;
    let tmpList = myList;     //This is not creating a new instance, but a reference
    tmpList [index].selectedFormat = format;
    updateMyList(tmpPrintersList);
  };
我还更改了myList对象,因此不必访问嵌套对象。(这是一个pita,查看redux wiki)

最后,我还将设置函数更新为不改变状态:

  handleFormatSelect = (format, listKey) => {
    const tmpKey = Object.assign({}, listKey);
    tmpKey.selectedFormat = format;
    this.updateMyList(tmpKey);
  };

除非您绝对需要Redux,否则我建议只使用React钩子和Reactn这样的全局存储。更少的代码和更少的类。遗憾的是,这不取决于我,我们也在使用sagas,所以这可能会限制选择。简明代码不是不使用Redux imo的建议。我不会轻易传播这个建议。@Freez不,如果当前存储状态与initialState相同,如果当前存储状态与初始状态相同,它将不会重新渲染。为什么要再次渲染视图?@Freez这就是我要说的。它不会重新命名。它是不一样的,否则就没关系了,我希望它是空的,但我的值仍然在Ethak you@A.Benjamins中。检查reducer的实现,也许您在某个点上改变了
initialState
,因此React/Redux无法实现差异。
  handleFormatSelect = (format, listKey) => {
    const tmpKey = Object.assign({}, listKey);
    tmpKey.selectedFormat = format;
    this.updateMyList(tmpKey);
  };