我正在挖掘React.js
来源,这是我目前正在努力理解的内容。
var ReactClass = {
/*
* @param {object} spec Class specification (which must define `render`).
* @return {function} Component constructor function.
* @public
*/
createClass: function(spec) {
var Constructor = function(props, context) {
// ...
this.props = props;
this.context = context;
this.state = null;
// ReactClasses doesn't have constructors. Instead, they use the
// getInitialState and componentWillMount methods for initialization.
var initialState = this.getInitialState ? this.getInitialState() : null;
// ...
this.state = initialState;
};
Constructor.prototype = new ReactClassComponent();
Constructor.prototype.constructor = Constructor;
// ...
mixSpecIntoComponent(Constructor, spec);
// ...
return Constructor; // <--- Who calls this?
},
// ...
};
调用React.createClass({})
时,您会获得带有两个参数Constructor
的{{1}}函数。
这个函数/方法在哪里被调用,即。谁做实际的props, context
?
答案 0 :(得分:2)
这不是直截了当的,你是对的。
简短的回答是Constructor
调用了React.render
。
基本路径是:
ReactClass
,其返回值为Constructor
。React.createFactory
或通过JSX抽象)时,您的类将React.createElement
绑定为type
,并返回绑定函数(请参阅{{ 3}})。render
作为node
传递给render
时,element
方法(上面链接)将node
变量设置为var myNewIcon = L.icon({
iconUrl: 'my-icon.png',
iconRetinaUrl: 'my-icon@2x.png',
iconSize: [38, 95],
iconAnchor: [22, 94],
popupAnchor: [-3, -76],
shadowUrl: 'my-icon-shadow.png',
shadowRetinaUrl: 'my-icon-shadow@2x.png',
shadowSize: [68, 95],
shadowAnchor: [22, 94]
});
参数,然后实例化直接或将其传递给其他lib实例化。