我目前正在处理具有以下内容的应用程序:
我的coursesAction文件有一个动作函数,用于从服务器获取单个课程,另一个动作函数用于从服务器获取所有课程。我应该使用单独的reducer来处理课程列表与单个课程,因为我的initialState是一个空数组(用于课程对象列表)?而不是一个空对象(用于课程对象)?:
let initialState = [];
export default function courseReducer(state = initialState, action){
switch(action.type){
case types.LOAD_COURSES_SUCCESS:
return action.courses;
default:
return state;
}
}
或者我应该从服务器检索所有课程,然后导航到我的课程'页面查询我要从商店寻找的课程?
答案 0 :(得分:4)
为两个不同的操作创建两个reducers并不是一个坏主意但如果你只是想因初始状态数据类型问题而将它分开,那么你不需要将它分开。两者都可以单一处理。 使用不可变,如果你使用react + rediux
,这也是一个很好的做法导入不可变
import {Record} from 'immutable'
将初始状态对象设为以下
const Initialstate = new Record({
course: {},
courses: []
})
您的减速机就像
export default function courseReducer(state = new Initialstate(), action = {}){
switch(action.type){
case types.LOAD_COURSES_SUCCESS:
return action.courses;
case types.LOAD_COURSE_SUCCESS:
return action.course;
default:
return state;
}
}
此外,如果将来需要,您可以在下面的reducer中更改状态。
case types.LOAD_CUSTOM:
return state.set("customPhase", "success")