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。

原文地址:https://www.cnblogs.com/Man-Dream-Necessary/p/7890242.html