Comment éditer des fichiers jsx (react) dans emacs?
19
J'ai utilisé le mode js2 mais il ne met pas correctement le HTML en javascript. J'ai trouvé ce dépôt https://github.com/jsx/jsx-mode.el mais ce n'est pas pour réagir, c'est pour un autre jsx.
Qu'utilisez-vous pour éditer l'application React avec des fichiers jsx?
Veuillez noter qu'il existe toujours un problème de retrait si vous utilisez la fonction flèche dans l'attribut du composant. Mais cette solution fonctionne très bien dans la plupart des cas.
Le patch est toujours utile pour la version stable actuelle rjsx-mode v0.4.0.
La raison pour laquelle je m'en tiens rjsx-modeest qu'il hérite du mode js2 afin que je puisse utiliser les fonctions imenu du mode js2. Il est très utile lors de l'écriture de javascript es6.
Veuillez noter que si vous utilisez js2-jsx-modeau lieu de rjsx-mode, vous avez toujours besoin de mon patch.
Solution 2:
Utilisez le mode Web. Je n'utilise pas le mode Web, mais sa récente note de version affirme que l'indentation jsx peut être gérée correctement. Si vous utilisez le mode Web, l'imenu du mode js2 n'est plus disponible.
Je ne savais pas que le support du mode web jsx, je vais l'utiliser ensuite, l'auteur est vraiment réactif sur github, si vous trouvez des bogues en retrait.
jcubic
1
Le problème d'indentation en mode rjsx semble être résolu!
cgl
Il est corrigé après avoir appliqué ma correction. J'utilise le mode rjsx dans Emacs 25.2 et 25.3
chen bin
Le patch est une bonne idée, j'aurais aimé qu'il soit déjà fusionné en mode rjsx!
Rudolf Olah
Pouvez-vous ajouter des informations sur le patch inutile avec les nouvelles versions de rjsx-modeou le supprimer complètement?
DoMiNeLa10
5
Sur Emacs masterbranche (éventuellement Emacs 27), le soutien JSX est maintenant intégré dans le mode par défaut JavaScript pour Emacs, js-mode. (Essayez-le! Vous pouvez créer à partir des sources ou par exemple installer un instantané à partir d'un PPA .)
Si l'utilisation de JSX est prévue, la prise en charge de JSX sera automatiquement activée dans les tampons JavaScript. Les critères par défaut sont:
le nom du fichier se termine par «.jsx», ou
import React from 'react'ou var React = require('react')apparaît en haut du fichier
Vous pouvez personnaliser la stratégie de détection en ajoutant des expressions rationnelles à la variable js-jsx-regexps. Pour activer JSX sans conditions, vous pouvez également mettre js-jsx-syntaxà t dans un fichier init / .dir-locals.el / variable fichier, ou un appel js-jsx-enableen js-mode-hook.
Une fois activé, JSX sera mis en surbrillance et mis en retrait correctement.
Les utilisateurs déçus du support d'indentation JSX disponible depuis la version 25 peuvent être agréablement surpris de constater que l'indentation est bien plus précise qu'auparavant. Par exemple, JSX n'a plus besoin d'être mis entre parenthèses pour être mis en retrait correctement. Le retrait du code avec les fonctions fléchées fonctionne également beaucoup mieux maintenant.
Toute votre configuration n'est pas pertinente pour JSX.
DoMiNeLa10
En effet, j'avais l'impression que ce serait utile de toute façon. Modification de la réponse pour supprimer les éléments non liés à JSX.
amirouche
0
J'utilise également le mode Web et si vous utilisez, use-packagevous pouvez utiliser cet extrait de code.
(use-package web-mode
:defer 2
:after (add-node-modules-path)
:ensure t
:mode ("\\.html?\\'"
"/themes/.*\\.php?\\'"
"/\\(components\\|containers\\|src\\)/.*\\.js[x]?\\'"
"\\.\\(handlebars\\|hbs\\)\\'")
:config (progn
(setq
web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2
web-mode-code-indent-offset 2
web-mode-enable-auto-closing t
web-mode-enable-auto-opening t
web-mode-enable-auto-pairing t
web-mode-enable-auto-indentation t
web-mode-enable-auto-quoting t
web-mode-enable-current-column-highlight t
web-mode-enable-current-element-highlight t
web-mode-content-types-alist
'(("jsx" . "/\\(components\\|containers\\|src\\)/.*\\.js[x]?\\'")))))
Cela ajoute également des modules de nœuds locaux à votre chemin afin que vous puissiez les utiliser eslintavec flycheck. Notez que cela suppose que vous êtes sur macOS, qui doit add-node-modules-pathrésoudre ce même problème. Vous devrez également configurer Flycheck séparément pour que les peluches fonctionnent.
Si vous ne voulez que des choses liées à jsx, vous pouvez utiliser ceci:
Cela activera le mode Web uniquement sur les dossiers avec des noms components, containersou src. Si vous souhaitez activer le mode Web sur n'importe quel fichier .js, supprimez ces lignes. Si vous ne souhaitez pas que le mode Web soit activé dans les srcdossiers, supprimez cette ligne dans la chaîne à la fois sur :modeet :config.
rjsx-mode
ou le supprimer complètement?Sur Emacs
master
branche (éventuellement Emacs 27), le soutien JSX est maintenant intégré dans le mode par défaut JavaScript pour Emacs,js-mode
. (Essayez-le! Vous pouvez créer à partir des sources ou par exemple installer un instantané à partir d'un PPA .)Si l'utilisation de JSX est prévue, la prise en charge de JSX sera automatiquement activée dans les tampons JavaScript. Les critères par défaut sont:
import React from 'react'
ouvar React = require('react')
apparaît en haut du fichierVous pouvez personnaliser la stratégie de détection en ajoutant des expressions rationnelles à la variable
js-jsx-regexps
. Pour activer JSX sans conditions, vous pouvez également mettrejs-jsx-syntax
à t dans un fichier init / .dir-locals.el / variable fichier, ou un appeljs-jsx-enable
enjs-mode-hook
.Une fois activé, JSX sera mis en surbrillance et mis en retrait correctement.
Les utilisateurs déçus du support d'indentation JSX disponible depuis la version 25 peuvent être agréablement surpris de constater que l'indentation est bien plus précise qu'auparavant. Par exemple, JSX n'a plus besoin d'être mis entre parenthèses pour être mis en retrait correctement. Le retrait du code avec les fonctions fléchées fonctionne également beaucoup mieux maintenant.
la source
J'utilise le mode Web avec la configuration suivante:
la source
J'utilise également le mode Web et si vous utilisez,
use-package
vous pouvez utiliser cet extrait de code.Cela ajoute également des modules de nœuds locaux à votre chemin afin que vous puissiez les utiliser
eslint
avecflycheck
. Notez que cela suppose que vous êtes sur macOS, qui doitadd-node-modules-path
résoudre ce même problème. Vous devrez également configurer Flycheck séparément pour que les peluches fonctionnent.Si vous ne voulez que des choses liées à jsx, vous pouvez utiliser ceci:
Cela activera le mode Web uniquement sur les dossiers avec des noms
components
,containers
ousrc
. Si vous souhaitez activer le mode Web sur n'importe quel fichier .js, supprimez ces lignes. Si vous ne souhaitez pas que le mode Web soit activé dans lessrc
dossiers, supprimez cette ligne dans la chaîne à la fois sur:mode
et:config
.la source