Reducer的下面有一些方法
今天来介绍一下combineReducers()这个方法,用来合并数据。
在前两篇Reducer 的拆分博客的基础上进行讲解combineReducers,
第一篇:Reducer 的拆分(一)http://blog.csdn.net/keji_123/article/details/79242355
第二篇:Reducer 的拆分(二)http://blog.csdn.net/keji_123/article/details/79245975
下面说一下combineReducers,combineReducers做的就是产生一个整体的 Reducer 函数。该函数根据 State 的 key 去执行相应的子 Reducer,并将返回结果合并成一个大的 State 对象。
下面是combineReducer的简单实现。
var data = {
users: [],
articles: [],
comments: []
};
function users(users = [], action) {
switch (action.type) {
case 'ADD_USER':
return [action.data, ...users];
default:
return users;
}
}
function articles(articles = [], action) {
switch (action.type) {
case 'ADD_ARTICLE':
return [action.data, ...articles];
case 'EDIT_ARTICLE':
return articles.map( article => {
if (article.id == action.data.id) {
article.title = action.data.title;
}
return article;
} );
default:
return articles;
}
}
function comments(comments = [], action) {
switch (action.type) {
default:
return comments;
}
}
const reducer = Redux.combineReducers({
users, //这种写法有一个前提,就是 State 的属性名必须与子 Reducer 同名
articles,
comments
});
const store = Redux.createStore( reducer , data );
/*
* 添加一个用户
* */
store.dispatch({
type: 'ADD_USER',
data: {id: 1, username: '小李'}
});
store.dispatch({
type: 'ADD_USER',
data: {id: 2, username: '小红'}
});
console.log( store.getState() );
store.dispatch({
type: 'ADD_ARTICLE',
data: {id: 1, title: '这是第一篇文章'}
});
store.dispatch({
type: 'ADD_ARTICLE',
data: {id: 2, title: '这是第二篇文章'}
});
console.log( store.getState() );
store.dispatch({
type: 'EDIT_ARTICLE',
data: {id: 2, title: 'redux'}
});