react-redux相关

作者: JTR354 | 来源:发表于2018-06-09 16:59 被阅读0次

    Flux

    Flux的单向数据流

    单向数据流框架的始祖

    • Dispatcher: 处理动作分发,维持Strore之间的依赖关系
    • Store: 负责存储数据和处理数据的相关逻辑
    • Action: 驱动Dispatcher的JS对象
    • View: 视图部分,负责显示用户界面

    Redux

    image

    Flux的基本原则是"单向数据流",Redux在此基础上强调三个基本原则:

    • 唯一数据源

    Redux只有一个Store,其状态结构的设计是Redux的核心问题(Redux对Store进行了封装)

    • 保持状态只读

    状态只读,修改Store状态通过派发action对象完成和flux相同. 改变状态不是直接修改状态上的值,而是创建一个新的状态对象返回给Redux,由Redux完成新的状态组装(此时,Reducer登场)

    • 数据改变只能通过纯函数完成

    纯函数Reducer;

    在Redux中每个函数签名如下reducer(state,action);state:当前状态,action:接受到的action对象
    Reducer只负责计算状态,却不负责存储状态

    React-Redux

    • connect: 连接Store (主要做两件事)

    connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])

    1. 获取Store上的状态转化为组件的prop
    2. 将组件中用户动作dispatch给Store
    • Provider: 提供包含store的context


      image
    1. 在原应用组件上包裹一层,使原来整个应用成为Provider的子组件
    2. 接收Redux的store作为props,通过context对象传递给子孙组件上的connect

    redux-actions插件

    createAction 简化action

    import * as ActionTypes from './ActionTypes'
    import { createAction } from 'redux-actions'
    // import { DECREMENT } from './ActionTypes'
    
    // export const increment = (counterCaption) => {
    //   return {
    //     type: ActionTypes.INCREMENT,
    //     counterCaption
    //   }
    // }
    // export const decrement = (counterCaption)=>{
    //   return{
    //     type:ActionTypes.DECREMENT,
    //     counterCaption
    //   }
    // }
    
    export const increment = createAction(ActionTypes.INCREMENT)
    export const decrement = createAction(ActionTypes.DECREMENT)
    

    handleActions 简化Reducer

    import * as ActionTypes from './ActionTypes'
    import { handleActions } from 'redux-actions'
    /* eslint-disable */
    // export default (state, action) => {
    //   const {counterCaption} = action
    //   switch (action.type) {
    //     case ActionTypes.INCREMENT:
    //       return {...state, [counterCaption]: state[counterCaption] + 1}
    //     case ActionTypes.DECREMENT:
    //       return {...state, [counterCaption]: state[counterCaption] - 1}
    //     default:
    //       return state
    //   }
    // }
    
    export default handleActions({
      [ActionTypes.DECREMENT] (state, action) {
        return {...state, [action.payload]: state[action.payload] - 1}
      },
      [ActionTypes.INCREMENT] (state, action) {
        return {...state, [action.payload]: state[action.payload] + 1}
      }
    }, null)
    
    参考:

    相关文章

      网友评论

        本文标题:react-redux相关

        本文链接:https://www.haomeiwen.com/subject/lngteftx.html