Il y a quelque chose que je trouve très déroutant lorsque je travaille React
.
Il existe de nombreux exemples disponibles sur Internet qui utilisent des .js
fichiers avec react mais de nombreux autres utilisent des .jsx
fichiers.
J'ai lu des .jsx
fichiers et je crois comprendre qu'ils vous permettent juste d'écrire des balises html dans votre fichier javascript
. Mais la même chose peut également être écrite dans des .js
fichiers.
Quelle est donc la différence réelle entre ces deux extensions .js
et .jsx
?
.jsx
n'est pas une exigenceDans la plupart des cas, ce n'est qu'un besoin du transpilateur / bundler, qui peut ne pas être configuré pour fonctionner avec des fichiers JSX, mais avec JS! Vous êtes donc obligé d'utiliser des fichiers JS au lieu de JSX.
Et comme react n'est qu'une bibliothèque pour javascript, cela ne fait aucune différence pour vous de choisir entre JSX ou JS. Ils sont complètement interchangeables!
Dans certains cas, les utilisateurs / développeurs peuvent également choisir JSX plutôt que JS, en raison de la mise en évidence du code, mais la plupart des nouveaux éditeurs affichent également correctement la syntaxe de réaction dans les fichiers JS.
la source
Les balises JSX (
<Component/>
) ne sont clairement pas du javascript standard et n'ont aucune signification particulière si vous les mettez dans une<script>
balise nue par exemple. Par conséquent, tous les fichiers React qui les contiennent sont JSX et non JS.Par convention, le point d'entrée d'une application React est généralement .js au lieu de .jsx même s'il contient des composants React. Cela pourrait aussi bien être .jsx. Tous les autres fichiers JSX ont généralement l'extension .jsx.
Dans tous les cas, la raison de cette ambiguïté est que, finalement, l'extension n'a pas beaucoup d'importance car le transpilateur heurte volontiers tous les types de fichiers tant qu'ils sont en réalité JSX.
Mon conseil serait: ne vous en faites pas.
la source
var elem = <div>Text</div>;
n'est pas un élément html standard; il ne prend pas en chargeappendChild
,classList
et probablement d'autres fonctionnalités html. Si vous voulez des balises html directement en javascript, il est préférable d'utiliser le modèle littéral (le backtick`
) avecinnerHtml
ououterHtml
.Outre le fait que les balises JSX ne sont pas du javascript standard, la raison pour laquelle j'utilise l'extension .jsx est qu'Emmet fonctionne toujours dans l'éditeur - vous savez, ce plugin utile qui étend le code html, par exemple ul> li en
la source
"emmet.includeLanguages": { "javascript": "javascriptreact" }
:, mais oui, je suis d'accord que le code JSX devrait utiliser l'extension .jsx si possible.Comme d'autres mentionnés, ce
JSX
n'est pas une extension Javascript standard. Il est préférable de nommer votre point d'entrée d'application en fonction.js
et pour les autres composants que vous pouvez utiliser.jsx
.J'ai une raison importante pour laquelle j'utilise
.JSX
pour tous les noms de fichiers des composants. En fait, dans un projet à grande échelle avec un énorme tas de code, si nous définissons tous les composants de React avec une.jsx
extension, il sera plus facile de naviguer vers différents fichiers javascript à travers le projet (comme les assistants, les middleware, etc.) et vous savez que c'est un composant React et pas d'autres types de fichier javascript.la source
JSX n'est pas du JavaScript standard, basé sur le guide de style Airbnb 'eslint' pourrait considérer ce modèle
comme avertissement, si vous avez nommé votre fichier MyComponent.jsx, il passera, sauf si vous modifiez la règle eslint, vous pouvez consulter le guide de style ici
la source