Я играю с ReactJS фреймворком на JSBin .
Я заметил, что если имя моего компонента начинается со строчной буквы, оно не работает.
Например, следующее не отображает:
var fml = React.createClass({
render: function () {
return <a href='google.com'>Go</a>
}
});
React.render(<fml />, document.body);
Но как только я заменить fml
с Fml
ней действительно делают.
Есть ли причина, по которой я не могу начинать теги со строчных букв?
javascript
reactjs
shaunakde
источник
источник
Ответы:
В JSX имена тегов в нижнем регистре считаются тегами HTML. Тем не менее, строчные имена тегов с точкой (свойство accessor) не являются.
Смотрите HTML-теги против React Components .
<component />
компилируется вReact.createElement('component')
(html tag)<Component />
компилируется вReact.createElement(Component)
<obj.component />
компилируется вReact.createElement(obj.component)
источник
let component = components[compType]; <component/>
и получал глупые ошибки.<components[name] />
который тоже не работает.Components
вместоcomponents
, их прекрасный сайт будет загружаться без ошибок, но без контента!@ Александр Кирзенберг дал очень хороший ответ, просто хотел добавить еще одну деталь.
React раньше содержал белый список с хорошо известными именами элементов, такими как и
div
т. Д., Который он использовал для различения элементов DOM и компонентов React.Но поскольку поддерживать этот список не так уж и весело, а веб-компоненты позволяют создавать собственные элементы, они установили правило, согласно которому все компоненты React должны начинаться с заглавной буквы или содержать точку .
источник
Из официальной ссылки React :
Также обратите внимание, что:
Что означает, что нужно использовать:
const Foo = foo;
перед использованиемfoo
в качестве компонента компонента в JSX.источник
Первая часть
JSX
тега определяет тип элемента React, в основном, существует соглашение с заглавными буквами, строчными буквами и точками .Типы с
JSX
заглавными буквами и точечные обозначения указывают, что тег ссылается на компонент React, поэтому, если вы используете JSX-<Foo />
компиляцию дляReact.createElement(Foo)
ИЛИ-
<foo.bar />
компиляцииReact.createElement(foo.bar)
и соответствуют компоненту, определенному или импортированному в вашем файле JavaScript.В то время как строчные буквы указывают на встроенный компонент, такой как
<div>
или, в<span>
результате получается строка'div'
или'span'
передаетсяReact.createElement('div')
.Реактив рекомендует именовать компоненты с заглавной буквы. Если у вас есть компонент, который начинается со строчной буквы, присвойте его заглавной переменной, прежде чем использовать в
JSX
.источник
В JSX классы React пишутся с заглавной буквы, чтобы сделать XML-совместимым, чтобы его нельзя было принять за тег HTML. Если классы реакции не пишутся с заглавной буквы, это HTML-тег как предопределенный синтаксис JSX.
источник