Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么应用程序redux在此还原程序中出现错误?_Javascript - Fatal编程技术网

Javascript 为什么应用程序redux在此还原程序中出现错误?

Javascript 为什么应用程序redux在此还原程序中出现错误?,javascript,Javascript,为什么应用程序redux在此还原程序中出现错误?我没有做什么?具体在哪里?如何修复?告诉我,请告诉我 减速器: 在您的示例中有很多内容,我会将其剥离一点(特别是去掉中间件和thunk),处理基本的Redux模型,然后再次构建它 您的减速器应如下所示: import { searchFilter } from '../components/app'; function reducer (state = {}, action) { switch (action.type) {

为什么应用程序redux在此还原程序中出现错误?我没有做什么?具体在哪里?如何修复?告诉我,请告诉我 减速器:


在您的示例中有很多内容,我会将其剥离一点(特别是去掉中间件和thunk),处理基本的Redux模型,然后再次构建它

您的减速器应如下所示:

 import { searchFilter } from '../components/app';
 function reducer (state = {}, action) {

    switch (action.type) {
      case 'SET_SHIFT':
         //no need for break on return
         return Object.assign({}, state, {
            shift: action.shift
         });
      case 'SET_SEARCH':
         return Object.assign({}, state, {
            search: action.search.toLowerCase()
         });
      case 'RUN_FILTER':
         return Object.assign({}, state, {
            shift: action.shift || state.shift,
            search: action.search || state.search,
            filteredData: searchFilter(state.search, state.data[state.shift])
         });
      case 'LOAD_DATA_START':
         return Object.assign({}, state, {
            day: action.day
         });
      case 'LOAD_DATA_END':
         return Object.assign({}, state, {
            data: action.data,
            shift: Object.keys(action.data)[0],
            filteredData: searchFilter(state.search, state.data[state.shift])
         });
      //then you definitely need to have this
      default:
         return state;
   }
}

export default reducer;    

我建议您在reducer中放入一些console.log语句,以便您可以看到数据按预期放入Redux存储?

我看到的主要问题是您没有从reducer返回新状态

减速器应该是一个纯函数,给定一个状态和一个动作,它返回一个新状态


返回状态
放在减速机的底部。

错误是什么?我现在看到的一个问题是,减速机应该是一个纯函数,它接受旧状态并从中创建新状态。然后返回新状态(请参见)。您的减速机没有返回任何内容,并且开关缺少一个
默认值
大小写。请阅读有关调试代码的提示。@TomasGidnop请注意,要从函数中返回某些内容,您需要有一个
return
语句。\r抱歉,我的错误。只是粘贴了你的代码。现在更正。在定义状态对象的属性时,没有分号和等号!如果有多个属性出现,则使用逗号表示另一个复制粘贴错误。显然,您不希望将任何对对象中状态的引用传递到object assign中。现在试试好的,我会试着看一看,我看了一下,只是要花很长时间才能把一切都整理好。很抱歉把东西拿出来,直到你找到一个可以工作的模型,然后开始把东西放回去。这是我能为你做的最好的了。把这个读几遍-
 import { searchFilter } from '../components/app';
 function reducer (state = {}, action) {

    switch (action.type) {
      case 'SET_SHIFT':
         //no need for break on return
         return Object.assign({}, state, {
            shift: action.shift
         });
      case 'SET_SEARCH':
         return Object.assign({}, state, {
            search: action.search.toLowerCase()
         });
      case 'RUN_FILTER':
         return Object.assign({}, state, {
            shift: action.shift || state.shift,
            search: action.search || state.search,
            filteredData: searchFilter(state.search, state.data[state.shift])
         });
      case 'LOAD_DATA_START':
         return Object.assign({}, state, {
            day: action.day
         });
      case 'LOAD_DATA_END':
         return Object.assign({}, state, {
            data: action.data,
            shift: Object.keys(action.data)[0],
            filteredData: searchFilter(state.search, state.data[state.shift])
         });
      //then you definitely need to have this
      default:
         return state;
   }
}

export default reducer;