2017-08-08 33 views
-2
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; 
} 

我使用行动/索引文件中的动作创建者定义从API中提取数据。 有人可以告诉我为什么state.all.concat没有定义?想要返回不同的值从相同reducer在reactjs

错误是这个样子

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; 
+0

你到底用'的console.log thing'是什么意思?这个:'action.payload.data.model.observationInstanceList'? – Denialos

+0

用'return state.all = [];'你正在改变状态并返回一个不同形状的状态。我很确定那不是你想要做的。您可能想要再次返回默认状态。最好把它解压到'const'。例如:'const DEFAULT_STATE = {all:[],count:null};'在reducer外部,内部:'function(state = DEFAULT_STATE,action){'及以后:case DELETE_OBSERVATION:return DEFAULT_STATE;'。 – Yoshi

+0

其实我在观察页面上实现过滤器。因此,一旦新的过滤器应用我想删除显示的观察,并加载新的观察,这就是为什么我做这个“state.all:[]”后删除前一个。 如果你有任何想法,请分享考虑上述情况。 我正在开发的项目是OpenSource,你可以在这里看看功能网站。 http://indiabiodiversity.org/observation/list?view=list 上面的页面是我想要实现的。 – user2903536

回答

0

好了,所以如果u希望上面的函数的工作,然后做这样的。

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; 
} 

`

相关问题