何时调用' React.createClass({})() ' ?
When is `React.createClass({})()` called
我正在挖掘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
函数,该函数有两个参数props, context
。
这个函数/方法在哪里被调用,即谁做实际的React.createClass({})(someProps, someContext)
?
这并不简单,你是对的。
简短的回答是Constructor
被React.render
调用。
查看这里的实际实例化块:https://github.com/facebook/react/blob/4c3e9650ba6c9ea90956a08542d9fa9b5d72ee88/src/renderers/shared/reconciler/instantiateReactComponent.js#L75
基本路径如下:
- 创建
ReactClass
,返回值为Constructor
。 - 当你创建一个工厂(直接使用
React.createFactory
或通过JSX抽象地),你的类被绑定到React.createElement
作为type
,与绑定函数得到返回(见这里)。 - 这个绑定函数就是当你用(或不带)props调用你的类时实际被调用的。
- 当它作为
node
传递给render
时,render
方法(上面的链接)将element
变量设置为node
参数,然后直接实例化它或将其传递给其他库进行实例化。
相关文章:
- 在React中,为什么我必须绑定onClick函数而不是调用它
- React路由器错误-'无法调用方法'getRouteAtDepth'的未定义'
- 如何在 React-router 中手动调用 Link
- 从React调用方法.JS州
- 通过调用React中的jsx文件设置Highcharts piechhartDefaults
- React/Redux 状态在第二次操作调用时为空
- React没有绑定函数调用,尽管有相反的警告
- 阻止React调用dangerouslySetInnerHTML客户端
- 如何绑定到这个,这样我就可以在这个coffeescript中正确地调用React中的setState
- 从React.11.2升级到.12.2,直接调用React组件
- 我可以在React和Redux中发送一个AJAX调用,而不需要操作创建者和还原器吗
- 如何调用React组件's函数(Coherent UI)
- 根据React中的调度循环取消反弹调用
- React如何调用ES6类的呈现函数,使“this”不引用类本身
- React-从呈现函数中的var调用处理程序
- 如何使用React从ajax调用成功后重定向
- 在react js中进行ajax调用后,该列将消失
- 测试React函数是用Jest调用的
- 从 txt/javascript 中的 react 调用 javascript 函数
- React调用bootstrap函数