React layer
Table of ContentsClose
1. Description
ES6 and JSX ready configuration layer for React
It will automatically recognize .jsx files and files with react imported.
1.1. Features:
- on-the-fly syntax checking
- proper syntax highlight and indentation with jsx
- backend support for autocompletion as in rjsx-mode
- jsfmt automatic formatting
- js2-refactor
- js-doc
2. Install
To use this configuration layer, add it to your ~/.spacemacs. You will need to
add react to the existing dotspacemacs-configuration-layers list in this
file.
React layer uses the same backend defined in javascript layer. Options are tern and lsp.
React layer also uses the same import backend defined in javascript layer.
To use the on-the-fly syntax checking, install eslint with babel and react
support:
$ npm install -g eslint babel-eslint eslint-plugin-react
If your project do not use a custom .eslintrc file I strongly advice you to
try out this one by Airbnb:
.eslintrc
When lsp is set as the backend, but you don't want to use lsp as the linter,
set the variable javascript-lsp-linter to nil in the Javascript layer.
React layer uses the same formatter defined in javascript layer. Options are
web-beautify and prettier.
To use automatic code formatting you need to install js-beautify or prettier
with:
$ npm install -g js-beautify prettier
If you install these in non-standard locations, then add the following to your
dotspacemacs/user-init function:
(add-to-list 'exec-path "/path/to/node/bins" t)
Be sure to have the e4x option set to true on your .jsbeautifyrc here it
is my configuration as an example:
{
"indent_size": 2,
"indent_char": " ",
"eol": "\n",
"indent_level": 0,
"indent_with_tabs": false,
"preserve_newlines": true,
"max_preserve_newlines": 2,
"jslint_happy": false,
"space_after_anon_function": false,
"brace_style": "collapse",
"keep_array_indentation": false,
"keep_function_indentation": false,
"space_before_conditional": true,
"break_chained_methods": true,
"eval_code": false,
"unescape_strings": false,
"wrap_line_length": 80,
"wrap_attributes": "auto",
"wrap_attributes_indent_size": 2,
"e4x": true,
"end_with_newline": true,
"brace_style": "collapse-preserve-inline"
}
3. Optional Configuration
You may refer to the web-mode configuration for fine tuning the indenting
behaviour.
For example to have a consistent 2 spaces indenting both on js and jsx you
may use these settings:
(setq-default ;; js2-mode js2-basic-offset 2 ;; web-mode css-indent-offset 2 web-mode-markup-indent-offset 2 web-mode-css-indent-offset 2 web-mode-code-indent-offset 2 web-mode-attr-indent-offset 2)
And if you want to have 2 space indent also for element's attributes, concatenations and contiguous function calls:
(with-eval-after-load 'web-mode (add-to-list 'web-mode-indentation-params '("lineup-args" . nil)) (add-to-list 'web-mode-indentation-params '("lineup-concats" . nil)) (add-to-list 'web-mode-indentation-params '("lineup-calls" . nil)))
4. Key bindings
4.1. rjsx-mode
The javascript layers keymap is set as the parent of the react layers keymap.
Check the javascript layers documentation for additional key bindings.
| Key binding | Description |
|---|---|
< |
inserts </> whenever it would start a new JSX node |
> |
right before the slash in a self-closing tag automatically inserts a closing tag |
SPC m r l t |
log thing at point |
SPC m r r t |
rename tag at point |
4.2. Formatting (web-beautify)
| Key binding | Description |
|---|---|
SPC m = |
beautify code in js2-mode, json-mode, web-mode, and css-mode |
4.2.1. Documentation (js-doc)
You can check more here
| Key binding | Description |
|---|---|
SPC m r d b |
insert JSDoc comment for current file |
SPC m r d f |
insert JSDoc comment for function |
SPC m r d t |
insert tag to comment |
SPC m r d h |
show list of available jsdoc tags |
4.3. Documentation (tern)
| Key binding | Description |
|---|---|
SPC m C-g |
brings you back to last place you were when you pressed M-.. |
SPC m g g |
jump to the definition of the thing under the cursor |
SPC m g G |
jump to definition for the given name |
SPC m h d |
find docs of the thing under the cursor. Press again to open the associated URL (if any) |
SPC m h t |
find the type of the thing under the cursor |
SPC m r r V |
rename variable under the cursor using tern |