Solusi 1:
Langkah 1, Gunakan https://github.com/felipeochoa/rjsx-mode
Langkah 2, Instal Emacs 25+, lihat https://github.com/mooz/js2-mode/issues/291
Langkah 3, patch rjsx-mode dengan kode di bawah ini
(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))))
Harap perhatikan bahwa masih ada beberapa masalah indentasi jika Anda menggunakan fungsi panah pada atribut komponen. Tetapi solusi ini berfungsi dengan baik dalam banyak kasus.
Patch masih berguna untuk versi stabil saat ini rjsx-mode v0.4.0
.
Bug diperbaiki pada 2018-8-19 dalam versi tidak stabil , lihat https://github.com/felipeochoa/rjsx-mode/pull/75 untuk detailnya.
Alasan saya bertahan rjsx-mode
adalah karena ia mewarisi dari mode js2 sehingga saya dapat menggunakan fungsi imenu dari mode js2. Ini sangat berguna saat menulis javascript es6.
Harap dicatat jika Anda menggunakan js2-jsx-mode
bukan rjsx-mode
, Anda masih membutuhkan tambalan saya.
Solusi 2:
Gunakan mode web. Saya tidak menggunakan web-mode tetapi catatan rilisnya baru-baru ini mengklaim indentasi jsx dapat ditangani dengan benar. Jika Anda menggunakan mode web, imenu dari mode js2 tidak tersedia lagi.