安装react
npm install --save reduxnpm
react绑定库和开发者工具redux
npm install --save react-redux npm install --save-dev redux-devtoolsapi
几个概念:函数
如何建立Redux store存放应用状态,api是 { subscribe, dispatch, getState };工具
let store = createStore(reducer)spa
能够订阅更新,也能够将事件绑定到视图层对象
store.subscribe(() => {console.log( store.getState() );})
state具体是怎么样的?事件
{ todos: [{text: 'Eat food',completed: true}, {text: 'Exercise',completed: false}],visibilityFilter: 'SHOW_COMPLETED' }
改变内部state的方法是dispatch一个action,action 能够序列化保存,以便回放ci
store.dispatch({ //action描述当前发生的事,为一个对象,type是必须属性type: 'INCREMENT',payload: 'Learn Redux'})
reducer把action,state串起来,用来管理整个应用的state;
function visibilityFilter(state = 'SHOW_ALL', action) {if (action.type === 'SET_VISIBILITY_FILTER') {return action.filter;} else {return state;}}function todos(state = [], action) {switch (action.type) {case 'ADD_TODO':return state.concat([{ text: action.text, completed: false }]);case 'TOGGLE_TODO':return state.map((todo, index) =>action.index === index ? { text: todo.text, completed: !todo.completed } : todo)default: return state;}}
function todoApp(state = {}, action) {return {todos: todos(state.todos, action),visibilityFilter: visibilityFilter(state.visibilityFilter, action)};}
import { combineReducers, createStore } from 'redux'let reducer = combineReducers({ visibilityFilter, todos })let store = createStore(reducer)
fff