Bawię się frameworkiem ReactJS na JSBin .
Zauważyłem, że jeśli nazwa mojego komponentu zaczyna się od małej litery, to nie działa.
Na przykład następujące elementy nie są renderowane:
var fml = React.createClass({
render: function () {
return <a href='google.com'>Go</a>
}
});
React.render(<fml />, document.body);
Ale jak tylko wymienić fml
z Fml
nim nie render.
Czy istnieje powód, dla którego nie mogę zaczynać tagów od małych liter?
javascript
reactjs
shaunakde
źródło
źródło
Odpowiedzi:
W JSX nazwy znaczników pisane małymi literami są traktowane jako znaczniki HTML. Jednak nazwy znaczników pisane małymi literami z kropką (akcesor właściwości) nie są.
Zobacz tagi HTML a komponenty React .
<component />
kompiluje się doReact.createElement('component')
(tag html)<Component />
kompiluje się doReact.createElement(Component)
<obj.component />
kompiluje się doReact.createElement(obj.component)
źródło
let component = components[compType]; <component/>
i dostawałem bezsensowne błędy.<components[name] />
co też nie działa.Components
zamiast tegocomponents
, ich urocza strona załaduje się bez błędów, ale bez zawartości!@Alexandre Kirszenberg udzielił bardzo dobrej odpowiedzi, chciał tylko dodać kolejny szczegół.
React zawierał białą listę dobrze znanych nazw elementów, takich jak
div
etc, których używał do rozróżniania elementów DOM od komponentów React.Ale ponieważ utrzymywanie tej listy nie jest takie zabawne, a ponieważ komponenty internetowe umożliwiają tworzenie niestandardowych elementów, uczynili regułę, że wszystkie komponenty React muszą zaczynać się od dużej litery lub zawierać kropkę .
źródło
Z oficjalnego odniesienia w React :
Pamiętaj również, że:
Co oznacza, że należy użyć:
const Foo = foo;
przed użyciemfoo
jako elementu komponentu w JSX.źródło
Pierwsza część
JSX
tagu określa typ elementu React, w zasadzie istnieje pewna konwencja: wielkie litery, małe litery, notacja kropkowa .Typy pisane wielką literą i z kropką wskazują, że
JSX
tag odwołuje się do komponentu React, więc jeśli używasz<Foo />
kompilacji JSX do kompilacjiReact.createElement(Foo)
OR do komponentu zdefiniowanego lub zaimportowanego w pliku JavaScript i odpowiadaj temu.
<foo.bar />
React.createElement(foo.bar)
Podczas gdy małe litery wskazują na wbudowany składnik, taki jak
<div>
lub,<span>
i skutkuje ciągiem znaków'div'
lub'span'
przekazaniem doReact.createElement('div')
.React zaleca nazwanie komponentów wielką literą. Jeśli masz komponent rozpoczynający się małą literą, przypisz go do zmiennej zapisywanej wielkimi literami przed użyciem w
JSX
.źródło
W JSX klasy React są pisane wielkimi literami, aby były zgodne z XML, więc nie są mylone ze znacznikami HTML. Jeśli klasy reakcji nie są pisane wielkimi literami, jest to znacznik HTML w postaci wstępnie zdefiniowanej składni JSX.
źródło