初识 react-redux

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
            })
        }
    }
}
相关文章
相关标签/搜索