Решение 1:
Шаг 1, используйте https://github.com/felipeochoa/rjsx-mode
Шаг 2. Установите Emacs 25+, см. Https://github.com/mooz/js2-mode/issues/291.
Шаг 3, Патч rjsx-режима с кодом ниже
(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))))
Обратите внимание, что по-прежнему существует проблема с отступом, если вы используете функцию стрелки в атрибуте компонента. Но это решение прекрасно работает в большинстве случаев.
Патч все еще полезен для текущей стабильной версии rjsx-mode v0.4.0
.
Ошибка была исправлена в 2018-8-19 годах в нестабильной версии , подробности см. Https://github.com/felipeochoa/rjsx-mode/pull/75 .
Причина, по которой я придерживаюсь, rjsx-mode
заключается в том, что он наследуется от js2-mode, поэтому я могу использовать функции imenu из js2-mode. Это очень полезно при написании es6 javascript.
Обратите внимание, если вы используете js2-jsx-mode
вместо rjsx-mode
, вам все еще нужен мой патч.
Решение 2:
Используйте веб-режим. Я не использую web-режим, но в его недавнем выпуске говорится, что отступ jsx может быть обработан правильно. Если вы используете веб-режим, imenu из js2-mode больше не доступен.