【发布时间】:2019-03-05 04:29:43
【问题描述】:
我可以有一个这样的功能组件:
const FuncList = ({ name }) => {
return (
<div className="shopping-list">
<h1>Shopping List for {name}</h1>
<ul>
<li>Instagram</li>
<li>WhatsApp</li>
<li>Oculus</li>
</ul>
</div>
)
}
我可以实例化它,基本上可以看到整个元素内容:
const obj = FuncList({ name: 'Pete' })
console.log(JSON.stringify(obj, null, 4))
-----
{
'type': 'div',
'key': null,
'ref': null,
'props': {
'className': 'shopping-list',
'children': [
{
'type': 'h1',
'key': null,
'ref': null,
'props': {
'children': [
'Shopping List for ',
'mike'
]
},
'_owner': null,
'_store': {}
},
{
'type': 'ul',
'key': null,
'ref': null,
'props': {
'children': [
{
'type': 'li',
'key': null,
'ref': null,
'props': {
'children': 'Instagram'
},
'_owner': null,
'_store': {}
},
....
]
},
'_owner': null,
'_store': {}
}
]
},
'_owner': null,
'_store': {}
}
现在当我将它与 JSX 语法一起使用时:
const obj = <JSXList name="Pete" />;
// same as: const obj = React.createElement(JSXList, { name: "Pete" });
console.log(JSON.stringify(obj, null, 4))
我得到几乎空的对象。 JSXList 的链接存储在哪里?所有的属性在哪里?它们是否以某种方式隐藏在对象内部?看起来 JSXList 的 'return' 方法从未被调用过,因此它从未被扩展,但是为什么没有引用它呢?
{
'key': null,
'ref': null,
'props': {
'name': 'Pete'
},
'_owner': null,
'_store': {}
}
如果我使用 'div' 而不是 JSXLint 作为第一个参数,我至少会得到指示元素用途的 'type' 属性。这背后有什么设计原理吗?
const obj = React.createElement('div', { name: "Pete" });
console.log(JSON.stringify(obj, null, 4))
隐藏该引用有什么意义吗?据我所知,它有点模糊的对象内省。
你可以使用codepad来玩,如果你喜欢。
【问题讨论】:
标签: javascript reactjs jsx