Giải pháp 1:
Bước 1, sử dụng https://github.com/felipeochoa/rjsx-mode
Bước 2, Cài đặt Emacs 25+, xem https://github.com/mooz/js2-mode/issues/291
Bước 3, Patch chế độ rjsx với mã bên dưới
(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))))
Xin lưu ý rằng vẫn còn một số vấn đề thụt lề nếu bạn sử dụng chức năng mũi tên trong thuộc tính thành phần. Nhưng giải pháp này hoạt động tốt trong hầu hết các trường hợp.
Bản vá vẫn hữu ích cho phiên bản ổn định hiện tại rjsx-mode v0.4.0
.
Lỗi đã được sửa vào 2018-8-19 ở phiên bản không ổn định , xem https://github.com/felipeochoa/rjsx-mode/pull/75 để biết chi tiết.
Lý do tôi dính vào rjsx-mode
là nó kế thừa từ chế độ js2 để tôi có thể sử dụng các hàm imothy từ chế độ js2. Nó rất hữu ích khi viết javascript es6.
Xin lưu ý nếu bạn sử dụng js2-jsx-mode
thay vì rjsx-mode
, bạn vẫn cần bản vá của tôi.
Giải pháp 2:
Sử dụng chế độ web. Tôi không sử dụng chế độ web nhưng lưu ý phát hành gần đây của nó tuyên bố thụt lề jsx có thể được xử lý đúng cách. Nếu bạn sử dụng chế độ web, imothy từ chế độ js2 sẽ không còn nữa.