ReactJS组件名称必须以大写字母开头?

我正在玩JSBin上的ReactJS框架。

我注意到,如果我的组件名称以小写字母开头,它不起作用。

例如以下不会渲染:

var fml = React.createClass({ render: function () { return <a href='google.com'>Go</a> } }); React.render(<fml />, document.body); 

但只要我用Fmlreplacefml ,它就会呈现。

有没有一个原因,我不能开始用小写字母标签?

在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语法一样。