redux的核心概念就是store、action、reducer,从调用关系来看如下所示
1
| store.dispatch(action) --> reducer(state, action) --> final state
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
var reducer = function(state, action){ switch (action.type) { case 'add_todo': return state.concat(action.text); default: return state; } };
var store = redux.createStore(reducer, []);
console.log('state is: ' + store.getState());
store.dispatch({type: 'add_todo', text: '读书'});
console.log('state is: ' + store.getState());
store.dispatch({type: 'add_todo', text: '写作'}); console.log('state is: ' + store.getState());
|
一、store、reducer、action关联
store
store
在这里代表的是数据模型,内部维护了一个state
变量
store
有两个核心方法,分别是getState
、dispatch
。前者用来获取store
的状态(state
),后者用来修改store
的状态
1 2 3 4 5 6 7 8 9 10 11 12
|
var store = redux.createStore(reducer, []);
console.log('state is: ' + store.getState());
store.dispatch({type: 'add_todo', text: '读书'});
|
action
- 对行为(如用户行为)的抽象,在
redux
里是一个普通的js
对象
action
必须有一个type
字段来标识这个行为的类型
1 2 3
| {type:'add_todo', text:'读书'} {type:'add_todo', text:'写作'} {type:'add_todo', text:'睡觉', time:'晚上'}
|
reducer
- 一个普通的函数,用来修改
store
的状态。传入两个参数 state
、action
- 其中,
state
为当前的状态(可通过store.getState()
获得),而action
为当前触发的行为(通过store.dispatch(action)
调用触发)
reducer(state, action)
返回的值,就是store
最新的state
值
1 2 3 4 5 6 7 8 9 10 11 12
|
var reducer = function(state, action){ switch (action.type) { case 'add_todo': return state.concat(action.text); default: return state; } };
|
二、关于actionCreator
1
| actionCreator(args) => action
|
1 2 3 4 5 6 7 8
| var addTodo = function(text){ return { type: 'add_todo', text: text }; };
addTodo('睡觉');
|