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。