1、数据流,react-redux是什么?为何使用react-redux?
数据流是什么?
行为与响应的抽象react
为何使用数据流?
帮助咱们明确了解行为与对应的响应redux
react与数据流的关系?
react是纯V框架,须要数据流支撑框架
为何使用redux?
官方绑定的单项数据流Flux比较重ide
redux比较简单,单一状态树函数
很是小,压缩后大概只有2Kspa
单项数据流?
传统MVC Model和View能够互相影响,致使数据混乱code
单数据流store 向view传输,操做View更新,在有用户发出新的指令分发到Displatcher上对象
2、React-Redux的用法
action – 行为的抽象
须要一个固定的type,且惟一
是一个js对象,通常由方法生成get
const addTodo = (text)=>{ renturn { type:'ADD_TODO', id:nextTodoId ++, text } }
reducer – 是响应的抽象
是纯方法
返回新状态
返回一个新对象,不修改当前state
state 当前的stage
根据传入action的type决定怎么作it
const todos = (state=[],action) => { switch(action.type){ case ADD_TODO : return [ ...state,{ text:action.text, completed:false } ] case COMPLETE_TODO : let arr = []; state.map((item,i)=>{ if (i == action.index) { item.completed = !item.completed }; arr.push(item) }) return arr default : return state } }
store – 是state和reducer的混合体、全部数据和状态的存储
action 作用于 store
reducer 根据 store响应
state 可预测
store是惟一的
由 createStore 方法生成
import {createStore} from 'redux'; import rootReducer from './reducer/index'; const store = createStore(rootReducer);
Provider – 让容器组件拿到state
let store = createStore(todoApp); render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') )
combineReducers – 合并多个Reducer
须要特别注意,使用combineReducers来合并reducer,须要子reducer的名字跟对应要接收的state的key一致
import { combineReducers } from 'redux'; const chatReducer = combineReducers({ chatLog, statusMessage, userName }) export default todoApp;
若是不一样名,就要采用下面的写法。
const reducer = combineReducers({ a: doSomethingWithA, b: processB, c: c }) // 等同于 function reducer(state = {}, action) { return { a: doSomethingWithA(state.a, action), b: processB(state.b, action), c: c(state.c, action) } }
connent – 用于从 UI 组件生成容器组件
mapStateToProps 负责输入逻辑,即将state映射到 UI 组件的参数(props)
负责输出逻辑,即将用户对 UI 组件的操做映射成 Action。
TodoList UI组件
const VisibleTodoList = connect( mapStateToProps, mapDispatchToProps )(TodoList)
mapStateToProps() – 把状态绑定到组件的属性当中。
第二个参数,表明容器组件的props对象 这个是一个传递给 全部属性的对象。
const mapStateToProps = (state) => { return { todos: getVisibleTodos(state.todos, state.visibilityFilter) } }
mapDispatchToProps() – 用来创建 UI 组件的参数到store.dispatch方法的映射
是一个函数,会获得dispatch和ownProps(容器组件的props对象)两个参数
const mapDispatchToProps = { onClick: (filter) => { type: 'SET_VISIBILITY_FILTER', filter: filter }; }
dispatch – 是 View 发出 Action 的惟一方法。
function mapDispatchToProps(dispatch){ return { changeName(name){ dispatch({ type:'ADD_NAME', name }) } } }