JSX与组件类实例化

mat*_*att 6 javascript reactjs

有人可以向我解释以下两个陈述之间的区别吗?

let test1 = new CustomComponent();
Run Code Online (Sandbox Code Playgroud)

let test2 = <CustomComponent />
Run Code Online (Sandbox Code Playgroud)

调试器是Chrome给我的:

for test1
CustomComponent {props: undefined, context: undefined, refs: Object, updater: Object, state: Object…}

for test2
Object {$$typeof: Symbol(react.element), key: null, ref: null, props: Object, type: function…}
Run Code Online (Sandbox Code Playgroud)

如何从test1类型的变量中获取test2类型的变量?

Ada*_*anc 7

所以.

let test1 = new CustomComponent();只是一个常规的javascript事情,同样的事情发生在调用new thing()任何其他时间.没什么特别的.

let test2 = <CustomComponent />这是一个JSX声明,而babel做了一些魔术.它汇编<CustomComponent />React.createElement(CustomComponent , null).所以,你可以看到它与调用完全不同new,它调用一个React函数来创建一个元素,反应知道如何处理.

Babel有一个REPL工具,如果你想快速了解一下发生了什么,你可以用来查看它对你的源代码做了什么.