Lösung 1:
Schritt 1: Verwenden Sie https://github.com/felipeochoa/rjsx-mode
Schritt 2, Emacs 25+ installieren, siehe https://github.com/mooz/js2-mode/issues/291
Schritt 3, Patch rjsx-mode mit dem folgenden Code
(defadvice js-jsx-indent-line (after js-jsx-indent-line-after-hack activate)
"Workaround sgml-mode and follow airbnb component style."
(save-excursion
(beginning-of-line)
(if (looking-at-p "^ +\/?> *$")
(delete-char sgml-basic-offset))))
Beachten Sie, dass bei Verwendung der Pfeilfunktion im Komponentenattribut immer noch Einrückungsprobleme auftreten. In den meisten Fällen funktioniert diese Lösung jedoch einwandfrei.
Der Patch ist für die aktuelle stabile Version weiterhin nützlich rjsx-mode v0.4.0
.
Der Fehler wurde am 2018-8-19 in einer instabilen Version behoben. Weitere Informationen finden Sie unter https://github.com/felipeochoa/rjsx-mode/pull/75 .
Der Grund, an dem ich rjsx-mode
festhalte , ist, dass es vom js2-Modus erbt, sodass ich imenu-Funktionen vom js2-Modus verwenden kann. Es ist sehr nützlich, wenn Sie es6 Javascript schreiben.
Bitte beachten Sie, wenn Sie js2-jsx-mode
anstelle von verwenden rjsx-mode
, benötigen Sie immer noch meinen Patch.
Lösung 2:
Verwenden Sie den Web-Modus. Ich verwende den Web-Modus nicht, aber die jüngsten Versionshinweise von jsx indentation können ordnungsgemäß verarbeitet werden. Wenn Sie den Web-Modus verwenden, ist das imenu aus dem js2-Modus nicht mehr verfügbar.