• React & Redux 的一些基本知识点


    一、React.createClass 跟 React.Component 的区别在于后者使用了ES6的语法,用constructor构造器来构造默认的属性和状态。

         1. React.createClass

            import React from 'react';
           const Contacts = React.createClass({
                render() {
                    return (
                        <div></div>
                    );
                 }
            });

           export default Contacts;


          2.React.Component

            import React from 'react';

           class Contacts extends React.Component {
               constructor(props) {
                   super(props);
               }
               render() {
                   return (
                       <div></div>
                   );
               }
           }

           export default Contacts;

    二、 Super(props)

            调用父类的构造函数,react希望把所有props,state的定义尽量放到父类中进行。

            子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,

            而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

           

    三、容器组件 Container Components 和展示组件 Presentational Components

          --------------------------------------------------------------------------
                        |           展示组件         |          容器组件                        
          --------------------------------------------------------------------------
                  作用   |   描述如何展现(骨架、样式)  | 描述如何运行(数据获取、状态更新)
          --------------------------------------------------------------------------
           直接使用Redux  |             否           | --------------------------------------------------------------------------
               数据来源   |            props         |   监听 Redux state                
          --------------------------------------------------------------------------
                数据修改  |     从 props 调用回调函数  |   向 Redux 派发 actions         
          --------------------------------------------------------------------------
                调用方式  |             手动         |   通常由 React Redux 生成        
          --------------------------------------------------------------------------

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

           连接 React 组件与 Redux store。连接操作不会改变原来的组件类,而是返回一个新的已与 Redux store 连接到组件类。

           1.[mapStateToProps(state, [ownProps]): stateProps] (Function):

             如果定义该参数,组件将会监听 Redux store 的变化。只要 Redux store 发生变化,mapStateToProps函数就会被调用。
             该回掉函数必须返回一个纯对象,这个对象与组件的props合并。如果省略了这个参数,组件将不会监听 Redux store。
             如果指定了第二个参数 ownProps,则该参数的值为传递到之间的props,而且只要组件接收到新的 props, mapStateToProps也会被调用。

           2.[mapDispatchToProps(dispatch, [ownProps]): dispatchProps] (Object or Function):

             如果传递的是一个对象,那么每个定义在该对象的函数都将被当作 Redux action creator,

             对象所定义的方法名将作为属性名;每个方法将返回一个新的函数,函数中dispatch方法会将action creator的返回值作为参数执行。

             这些属性会被合并到组件的 props 中。如果传递的是一个函数,该函数将接收一个 dispatch 函数,然后由你来决定如何返回一个对象,

             这个对象通过 dispatch 函数与 action creator 以某种方式绑定在一起(提示:你也许会用到 Redux 的辅助函数 bindActionCreators())。

             如果你省略这个 mapDispatchToProps 参数,默认情况下,dispatch 会注入到你的组件 props 中。如果指定了该回调函数中第二个参数 ownProps,

             该参数的值为传递到组件的 props,而且只要组件接收到新 props,mapDispatchToProps 也会被调用。

          3.[mergeProps(stateProps, dispatchProps, ownProps): props] (Function):

            如果指定了这个参数,mapStateToProps() 与 mapDispatchToProps() 的执行结果和组件自身的 props 将传入到这个回调函数中。
            该回调函数返回的对象将作为 props 传递到被包装的组件中。你也许可以用这个回调函数,根据组件的 props 来筛选部分的 state 数据,
            或者把 props 中的某个特定变量与 action creator 绑定在一起。如果你省略这个参数,默认情况下返回 Object.assign({}, ownProps, stateProps, dispatchProps) 的结果。

          4.[options] (Object):

            如果指定这个参数,可以定制 connector 的行为。

           [pure = true] (Boolean): 如果为 true,connector 将执行 shouldComponentUpdate 并且浅对比 mergeProps 的结果,避免不必要的更新,前提是当前组件是一个“纯”组件,
           它不依赖于任何的输入或 state 而只依赖于 props 和 Redux store 的 state。默认值为 true。

          [withRef = false] (Boolean): 如果为 true,connector 会保存一个对被包装组件实例的引用,该引用通过 getWrappedInstance() 方法获得。默认值为 false。

  • 相关阅读:
    升级ios 不能连原本的xcode /xcode不能抓帧/换xcode版本 build fail
    BlackBerry Key2 键盘扩展
    再议C风格变量声明
    怎样去除SVN中的某个版本之前的所有版本
    mysql 常用基础语句
    乱码问题
    sql server
    MySQL查询今天、昨天、上周、近30天、去年等的数据的方法
    java 时间转换
    sql server 日期
  • 原文地址:https://www.cnblogs.com/Man-Dream-Necessary/p/7890242.html
Copyright © 2020-2023  润新知