Source: component/ConextProvider.js

/**
 * @file ContextProvider
 *
 * @author Leon(leon@outlook.com)
 * @requires react
 */

var React = require('react');

/**
 * ei上下文提供组件
 *
 *
 * 此模块主要用于提供React组件的`context`环境
 * 凡在`ContextProvider`中的组件,都可以通过向`contextTypes`添加`ei`属性来获得`context`的访问权限
 *
 * 在`ei`属性中,我们提供了`store`和`dispatch`两个接口
 * 分别用来获取`store`数据和发送`action`
 *
 * @class
 * @extends ReactComponent
 */
var ContextProvider = React.createClass(/** @lends ContextProvider.prototype */ {


    /**
     * 子控件上下文属性类型描述符
     *
     * @type {Object}
     */
    childContextTypes: {
        ei: React.PropTypes.object.isRequired
    },

    /**
     * `ContextProvider`实例化参数类型描述符
     *
     * `ContextProvider`组件必须包含有一个ei属性
     *
     * @type {Object}
     */
    propTypes: {
        ei: React.PropTypes.object.isRequired
    },

    /**
     * 获取子控件上下文
     *
     * @protected
     * @return {Object}
     */
    getChildContext: function () {

        return {
            ei: this.props.ei
        };

    },

    /**
     * 渲染
     *
     * @return {ReactElement}
     */
    render: function () {

        var ei = this.props.ei;

        return this.props.children(
            ei.store,
            ei.dispatch
        );

    }


});

module.exports = ContextProvider;