• redux使用(一)


    Redux的基本使用&&API介绍

    1. Reducer
      1. Redux中负责响应action并修改数据的角色就是reducer
      2. reducer的本质实际上是一个函数,其函数签名为:reducer(previousState,action) => newStatereducer(previousState,action) => newState
      3. reducer 只是一个模式匹配的东西,真正处理数据的函数,一般是额外在别的地方写的(当然直接写在reducer中也没问题,只是不利于后期维护)
      4. 不要直接修改传入的参数previousState,最好返回一个新的对象state
    2. action
      1. 代表用户操作
      2. 规定一定有一个属性type,type属性一定是唯一的
      3. 如果所有的action都手写可能很麻烦,我们定义一个action Creaters
        function addTo(num) {
            return {
                type: 'Increment',
                num
            }
        }
        export default addTo;
    3. store
      1. Store 就是保存数据的地方,你可以把它看成一个容器。整个应用只能有一个 Store。
      2. Redux 提供createStore这个函数,用来生成 Store。
        import { createStore } from 'redux'
        import reducer from './reducer'
        
        let store = createStore(
            reducer
        )
      3. createStore的3个参数:
        • 参数1:reducer
        • 参数2:preloadedState,state的初始值,一般由服务器给出,如果给了这个值,默认会覆盖reducer里的初始值
        • 参数3:enhancer,会对createStore进行增强后,再传入reducer和preloadedState,相当于一个高阶函数,返回结果:enhancer(createStore)(reducer, preloadedState)
    4. state
      1. store对象包含所有的数据,如果我们想获得当前这个时间点的数据,可以使用store.getState();
    5. dispatch
      1. 用户发出action修改state的唯一方法就是dispatch
      2. Store.dispatch(action);调用之后,会去执行reducer规则
    6. subscribe
      1. 对state进行监听,一旦发生变化就会执行这个函数listener
        import { createStore } from 'redux';
        const store = createStore(reducer);
         
        store.subscribe(listener);
      2. 解除监听,通过subscribe返回的函数,执行之后可以接触监听
        let unsubscribe = store.subscribe(() =>
          console.log(store.getState())
        );
         
        unsubscribe();

         

    connect&&Provier的使用

    1. 为什么要使用?
      • 使用redux我们要实现视图的更新,需要先Store.getState()获取数据,使用Store.dispatch()更新数据,再使用Store.subscribe()去订阅这个更新,如果很多地方都这样做一遍,实在是不堪其重
      • 换个思路,把store直接集成到React应用的顶层props里面,只要各个子组件能访问到顶层props就行了,Provider正是这样一个通过context设置store的组件,然后在通过connect容器组件把“指定的state & 指定的action”和 React组件关联起来
    1. Provider:将store传给组件
      import { Provider } from 'react-redux'
      import store from './store'
      
      ReactDOM.render(
      <Provider store={store}>
          <App />
      </Provider>
      , document.getElementById('root'));
    2. connect:将组件与redux关联起来的高阶函数
      export default connect(
        mapStateToProps,
        mapDispatchToProps
      )(App);
    3. mapStateToProps():建立一个外部state到内部props的一个映射
      1. 是一个函数,接收state作为参数,返回一个对象,每一个key代表一个内部的属性
        const mapStateToProps = (state) => {
          return {
            todos: getVisibleTodos(state.todos, state.visibilityFilter)
          }
        }
        //getVisibleTodos是一个自定义计算state的函数
      2. mapStateToProps会订阅 Store,每当state更新的时候,就会自动执行,重新计算 UI 组件的参数,从而触发 UI 组件的重新渲染。
      3. 可以接收第二个参数,代表容器组件的props值
        const mapStateToProps = (state, ownProps) => {
          return {
            active: ownProps.filter === state.visibilityFilter
          }
        }
      4. 使用ownProps作为参数后,如果容器组件的参数发生变化,也会引发 UI 组件重新渲染。
      5. connect方法可以省略mapStateToProps参数,那样的话,UI 组件就不会订阅Store,就是说 Store 的更新不会引起 UI 组件的更新。
    4. mapDispatchToProps():建立 UI 组件的参数到store.dispatch方法的映射
      1. 如果mapDispatchToProps是一个函数,会得到dispatch和ownProps(容器组件的props对象)两个参数。
        const mapDispatchToProps = (
          dispatch,
          ownProps
        ) => {
          return {
            onClick: () => {
              dispatch({
                type: 'SET_VISIBILITY_FILTER',
                filter: ownProps.filter
              });
            }
          };
        }
      2. 也可以是一个对象
    5. 两个函数都是将属性映射到props上面,所以通过this.props.onClick这样去取值
  • 相关阅读:
    Hibernate二 配置
    Hibernate学习笔记一 理解
    使用Oracle的logminer工具进行日志挖掘
    确定系统中的字节序是大端字节序还是小端字节序。
    linux下oracle对参数要求的解释
    SnapAssure备份恢复(从文件系统到ASM实例)
    oracle的增量检查点
    C# 的三种序列化方法
    C#引用C++的DLL时C#和C++的数据类型对照表
    asp.net通过基类实现统一脚本和样式的管理
  • 原文地址:https://www.cnblogs.com/longlongdan/p/10784764.html
Copyright © 2020-2023  润新知