1、三大原则:单一数据源、state是只读的(Redux中state的更改,其实是创建了一个全新的state)、使用纯函数来执行修改
1)将整个应用的state储存在唯一的store对象中
2)state只能通过触发action来修改,其中action就是一个描述性的普通对象
3)使用reducer来描述action如何修改state
2、store
1)创建store:createStore(reducer,[initialState],enhancer)
import {createStore} from redux;
function todos(state=[],action){
switch(action.type){
case 'ADD_TODO':
return state.concat([action.text]);
default:
return state;
}
}
let store=createStore(todos,['HTML']);
store.dispatch({
type:'ADD_TODO',
text:'CSS'
})
console.log(store.getState());
2)store的API
dispatch(action):触发action
getState():获取当前的state
subscribe(listener):注册一个监听函数,state发生变化时触发
replaceReducer(nextReducer):替换reducer
3、action
1)action是一个普通的描述性对象
{
type:'ADD_RECIPE',
meal:["rich","milk"]
}
2)action creator:对action做了简单的封装
function addRecipe=({day,recipe,meal})=>{ return { type:ADD_RECIPE, day, recipe, meal } };
4、reducer
纯函数:只要传入的参数相同,那么返回的state就一定相同。
function food(state={},action) { switch (action.type){ case ADD_RECIPE: const { recipe }=action; return { ...state, [recipe.label]:recipe }; default: return state; } }