Je joue avec le framework ReactJS sur JSBin .
J'ai remarqué que si le nom de mon composant commence par une lettre minuscule, cela ne fonctionne pas.
Par exemple, ce qui suit ne rend pas:
var fml = React.createClass({
render: function () {
return <a href='google.com'>Go</a>
}
});
React.render(<fml />, document.body);
Mais dès que je remplace le fml
par, Fml
il rend.
Y a-t-il une raison pour laquelle je ne peux pas commencer les balises par des minuscules?
javascript
reactjs
shaunakde
la source
la source
Réponses:
Dans JSX, les noms de balises minuscules sont considérés comme des balises HTML. Cependant, les noms de balises minuscules avec un point (accesseur de propriété) ne le sont pas.
Voir les balises HTML et les composants React .
<component />
compile versReact.createElement('component')
(balise html)<Component />
compile enReact.createElement(Component)
<obj.component />
compile enReact.createElement(obj.component)
la source
let component = components[compType]; <component/>
, et obtenant des erreurs absurdes.<components[name] />
ce qui ne fonctionne pas non plus.Components
placecomponents
, leur joli site se chargera sans erreur mais sans contenu!@Alexandre Kirszenberg a donné une très bonne réponse, je voulais juste ajouter un autre détail.
React contenait auparavant une liste blanche de noms d'élément bien connus comme
div
etc, qu'il utilisait pour différencier les éléments DOM et les composants React.Mais parce que maintenir cette liste n'est pas si amusant et que les composants Web permettent de créer des éléments personnalisés, ils en ont fait une règle selon laquelle tous les composants React doivent commencer par une lettre majuscule ou contenir un point .
la source
D'après la référence officielle React :
Notez également que:
Ce qui signifie qu'il faut utiliser:
const Foo = foo;
avant de l'utiliserfoo
comme élément Component dans JSX.la source
La première partie d'une
JSX
balise détermine le type de l'élément React, fondamentalement, il existe une convention en majuscules, en minuscules, en notation par points .Les types en majuscules et en notation par points indiquent que la
JSX
balise fait référence à un composant React, donc si vous utilisez la<Foo />
compilation JSX pour compilerReact.createElement(Foo)
OU et correspondre à un composant défini ou importé dans votre fichier JavaScript.
<foo.bar />
React.createElement(foo.bar)
Alors que le type minuscule indique à un composant intégré comme
<div>
ou<span>
et entraîne une chaîne'div'
ou est'span'
passé àReact.createElement('div')
.React recommande de nommer les composants avec une majuscule. Si vous avez un composant qui commence par une lettre minuscule, affectez-le à une variable en majuscule avant de l'utiliser dans
JSX
.la source
Dans JSX, les classes React sont en majuscules pour rendre XML compatible, afin qu'il ne soit pas confondu avec une balise HTML. Si les classes de réaction ne sont pas en majuscules, il s'agit d'une balise HTML en tant que syntaxe JSX prédéfinie.
la source