Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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
要从reactjs中的同一个减速机返回不同的值吗_Reactjs - Fatal编程技术网

要从reactjs中的同一个减速机返回不同的值吗

要从reactjs中的同一个减速机返回不同的值吗,reactjs,Reactjs,我正在使用action/index文件中的action creator define从API获取数据。 有人能告诉我为什么state.all.concat没有定义吗 错误看起来像这样 import {FETCH_OBSERVATION} from '../actions/index'; import {DELETE_OBSERVATION} from '../actions/index'; export default function(state={all:[],count:null},ac

我正在使用action/index文件中的action creator define从API获取数据。 有人能告诉我为什么state.all.concat没有定义吗

错误看起来像这样

import {FETCH_OBSERVATION} from '../actions/index';
import {DELETE_OBSERVATION} from '../actions/index';

export default function(state={all:[],count:null},action){
  switch (action.type) {
    case FETCH_OBSERVATION:
    console.log("data for fetch observationCount",action.payload.data.model.observationInstanceList);

     return{
       all:state.all.concat(action.payload.data.model.observationInstanceList),
       count:action.payload.data.model.observationCount
     }
    case DELETE_OBSERVATION:
    return state.all=[];
    default:
    return state

  }
  return state;
}
Cannot read property 'concat' of undefined
at ./src/reducers/reducer_observation.js.__webpack_exports__.a (reducer_observation.js:10)
at combination (combineReducers.js:120)
at dispatch (createStore.js:165)
at redux-logger.js:1
at index.js:28
at dispatch (applyMiddleware.js:35)
at action.payload.then._extends.payload (index.js:25)
at <anonymous>

好的,如果你想让上面的函数工作,那么就这样做

import { combineReducers } from 'redux';
import SpeciesChartReducer from './reducer_chart_data';
import ObservationReducer from './reducer_observation';
import TaxonReducer from './reducer_taxon_list';
import  UserGroupNames from './reducer_fetch_userGroup';
import  UserGroupObservations from './reducer_fetch_groupobservations';
import  HomeTotalCount from './reducer_home_total_count';

const rootReducer = combineReducers({
  Observation:ObservationReducer,
  ChartData:SpeciesChartReducer,
  treeData:TaxonReducer,
  UserGroupNames:UserGroupNames,
  UserGroupObservations:UserGroupObservations,
  HomeTotalCount:HomeTotalCount
});

export default rootReducer;

`

你所说的console.log到底是什么意思?这是:action.payload.data.model.ObservationStanceList?,返回状态为.all=[];你改变了状态,也返回了不同形状的状态。我很确定那不是你想做的。您可能希望再次返回默认状态。最好将其提取到常量。例如:const DEFAULT_STATE={all:[],count:null};在reducer外部和内部:functionstate=DEFAULT_STATE,action{和更高版本:case DELETE_OBSERVATION:return DEFAULT_STATE;。实际上,我正在观察页面上实现过滤器。因此,一旦应用新过滤器,我想删除显示的观察,并加载新的观察,这就是为什么我在执行此状态后删除上一个观察。全部:[]。如果你有任何想法,请分享考虑上述场景。我正在从事的项目是开源的,你可以在这里查看功能网站。上面的页面是我想要实现的。这与你最终尝试实现的目标并不相关,变异和返回不同的状态形状是简单的错误做法。参考nce:…这就是我在执行此状态后删除上一个的原因。all:[]但这就是问题所在。您1通过改变状态来删除它,错误。2您返回的状态形状不同。状态现在是表达式状态的结果。all=[];这是一个普通数组,不好。您要做的是返回一个新状态,该状态具有正确的形状,表示相同的属性。如果这样做,您会发现它与默认状态非常相似。因此,我建议提取它。
import {FETCH_OBSERVATION} from '../actions/index';
import {DELETE_OBSERVATION} from '../actions/index';
const DEFAULT_STATE={all:[],count:null}
export default function(state=DEFAULT_STATE,action){
  switch (action.type) {
    case FETCH_OBSERVATION:
     return{
       all:state.all.concat(action.payload.data.model.observationInstanceList),
       count:action.payload.data.model.observationCount
     }
    case DELETE_OBSERVATION:
    return DEFAULT_STATE;
    default:
    return DEFAULT_STATE

  }
  return DEFAULT_STATE;
}