要从reactjs中的同一个减速机返回不同的值吗
我正在使用action/index文件中的action creator define从API获取数据。 有人能告诉我为什么state.all.concat没有定义吗 错误看起来像这样要从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
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;
}