ReactJS组件名称必须以大写字母开头?
我正在玩JSBin上的ReactJS框架。
我注意到,如果我的组件名称以小写字母开头,它不起作用。
例如以下不会渲染:
var fml = React.createClass({ render: function () { return <a href='google.com'>Go</a> } }); React.render(<fml />, document.body);
但只要我用Fml
replacefml
,它就会呈现。
有没有一个原因,我不能开始用小写字母标签?
在JSX中,小写标签名称被认为是HTML标签。 但是,带小点(属性访问器)的小写标签名不是。
查看HTML标记与React组件 。
-
<component />
编译成React.createElement('component')
(html标签) -
<Component />
编译为React.createElement(Component)
-
<obj.component />
编译为React.createElement(obj.component)
莫尔法斯给出了非常好的答案,只是想补充一点细节。 React用于包含像div
等知名元素名称的白名单,它用来区分DOM元素和React组件。
但是因为维护这个列表并不是那么有趣,而且因为Web组件可以创build自定义元素,所以他们规定所有React组件都必须以大写字母开头,或者包含一个点。
JSX
标签的第一部分决定了React元素的types,基本上有一些约定大写,小写,点符号 。
大写和点符号types表示JSX
标记引用了React组件,因此如果使用JSX <Foo />
编译到React.createElement(Foo)
要么
<foo.bar />
编译成React.createElement(foo.bar)
并对应于在JavaScript文件中定义或导入的组件。
而小写字母表示类似于<div>
或<span>
的内置组件,并且导致传递给React.createElement('div')
的string'div'
或'span'
。
Reactbuild议用大写字母命名组件。 如果您确实有一个以小写字母开头的组件,则在将它用于JSX
之前,将其分配给大写variables。
在JSX中,React Classes是大写的,使XML兼容,所以它不会被误认为HTML标签。 如果反应类不是大写,那么它就是一个HTML标记,就像预定义的JSX语法一样。