362 votes

ReactJS - .JS vs .JSX

Il y a quelque chose que je trouve très déroutant lorsque je travaille dans React .

Il y a beaucoup d'exemples disponibles sur internet qui utilisent .js avec react mais beaucoup d'autres utilisent .jsx des fichiers.

J'ai lu des articles sur .jsx et si j'ai bien compris, ils vous permettent simplement d'écrire des balises html dans vos fichiers javascript . Mais la même chose peut être écrite en .js également.

Quelle est donc la différence réelle entre ces deux extensions ? .js y .jsx ?

0 votes

0 votes

Cela ne fait aucune différence, mais si vous êtes un adepte du code propre, vous pouvez suivre le style de codage d'Airbnb, qui recommande d'utiliser .jsx. github.com/airbnb/javascript/tree/master/react#basic-rules

290voto

limelights Points 7833

Il n'y en a pas lorsqu'il s'agit d'extensions de fichiers. Votre bundler/transpiler/quelque chose se charge de déterminer le type de contenu du fichier.

Il y a cependant d'autres éléments à prendre en compte pour décider de ce qu'il convient de mettre dans une .js ou un .jsx type de fichier. Puisque JSX n'est pas du JavaScript standard, on pourrait dire que tout ce qui n'est pas du JavaScript "ordinaire" devrait être placé dans ses propres extensions, c'est-à-dire.., .jsx pour JSX et .ts pour TypeScript par exemple.

Il y a un bonne discussion ici disponible pour la lecture

9 votes

Bon lien ! Pour moi cette discussion est aussi quelque chose d'intéressant !

3 votes

Bien dit. JSX n'est ni JS ni HTML, donc lui donner sa propre extension permet d'indiquer ce dont il s'agit - même si l'utilisation de la fonction .jsx n'est pas une obligation

1 votes

La distinction entre les fichiers .js et .jsx était utile avant Babel, mais elle ne l'est plus aujourd'hui.

66voto

marpme Points 1009

Dans la plupart des cas, il s'agit seulement d'un besoin pour le transpiler/bundler, qui peut ne pas être configuré pour travailler 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 éditeurs récents affichent également la syntaxe react correctement dans les fichiers JS.

45voto

jlaitio Points 699

Balises JSX ( <Component/> ) ne sont manifestement pas des éléments standard de javascript et n'ont aucune signification particulière si vous les placez à l'intérieur d'une page nue. <script> par exemple. Par conséquent, tous les fichiers React qui les contiennent sont des JSX et non des JS.

Par convention, le point d'entrée d'une application React est généralement .js au lieu de .jsx, même si elle contient des composants React. Il pourrait tout aussi bien être .jsx. Tous les autres fichiers JSX portent généralement l'extension .jsx.

Quoi qu'il en soit, la raison de cette ambiguïté est qu'en fin de compte, l'extension n'a pas beaucoup d'importance puisque le transpilateur se contente d'avaler n'importe quel type de fichier tant qu'il s'agit de JSX.

Mon conseil est le suivant : ne vous en faites pas.

0 votes

Même var elem = <div>Text</div>; n'est pas un élément html standard ; il ne prend pas en charge les éléments suivants appendChild , classList et probablement d'autres fonctionnalités html. Si vous voulez des balises html directement dans le javascript, il est préférable d'utiliser le template literal (le backtick ` ) ainsi que innerHtml o outerHtml .

7voto

Gabriel Vasile Points 21

Outre le fait que les balises JSX ne sont pas du javascript standard, la raison pour laquelle j'utilise l'extension .jsx est qu'avec elle Emmet fonctionne toujours dans l'éditeur - vous savez, ce plugin utile qui développe le code html, par exemple ul>li en

<ul>
  <li></li>
</ul>

2 votes

Il est possible d'utiliser Emmet pour les fichiers .js dans Visual Studio Code en ajoutant les éléments suivants à votre fichier settings.json : "emmet.includeLanguages": { "javascript": "javascriptreact" } Mais oui, je suis d'accord pour dire que le code JSX doit utiliser l'extension .jsx si possible.

6voto

Majid Eltayeb Points 58

JSX n'est pas du JavaScript standard, d'après le guide de style Airbnb, 'eslint' pourrait prendre en compte ce modèle.

// filename: MyComponent.js
function MyComponent() {
  return <div />;
}

à titre d'avertissement, si vous nommez votre fichier MyComponent.jsx, il passera, à moins que vous ne modifiiez la règle eslint. vous pouvez vérifier le guide de style aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X