LoginSignup
15
3

More than 5 years have passed since last update.

ESLint、Airbnbのスタイルガイドをすべて守るのは難しいね。

Last updated at Posted at 2017-06-17

create-react-appで生成されたApp.jsからエラー

何もしてないのにエラーが出た。

src/App.js|5 col 1 error| Component should be written as a pure function (react/prefer-stateless-function)
src/App.js|8 col 7 error| JSX not allowed in files with extension '.js' (react/jsx-filename-extension)

prefer-stateless-functionはその名の通りに状態がないコンポーネントはstateless functionを使ってくれと言う意味で、
jsx-filename-extensionはjsxフォーマットなのに拡張子が.jsxではないと言う意味である。

まずはprefer-stateless-functionについて修正してみた。

src/App.js|5 col 21 error| Missing space before function parentheses. (space-before-function-paren)

今度はfunctionの後ろに空白を入れると指摘された。
function()はダメでfunction ()にするとの話だ。

    1 import React, { Component } from 'react';
    2 import logo from './logo.svg';
    3 import './App.css';
    4
   5 const App = function () {
    6   return (
    7     <div className="App">
    8       <div className="App-header">
    9         <img src={logo} className="App-logo" alt="logo" />
   10         <h2>Welcome to React</h2>
   11       </div>
   12       <p className="App-intro">
   13         To get started, edit <code>src/App.js</code> and save to reload.
   14       </p>
   15     </div>
   16   );
   17 };
   18
   19 export default App;
src/App.js|5 col 13 warning| Unexpected unnamed function. (func-names)

今度は何?、function名がない場合はfunctionを使うな!という意味らしい。
それでも今度は警告で済んだ。
警告でも嫌だから、arrow関数でやってみるか。

    1 import React, { Component } from 'react';
    2 import logo from './logo.svg';
    3 import './App.css';
    4
   5 const App = () => {
    6   return (
    7     <div className="App">
    8       <div className="App-header">
    9         <img src={logo} className="App-logo" alt="logo" />
   10         <h2>Welcome to React</h2>
   11       </div>
   12       <p className="App-intro">
   13         To get started, edit <code>src/App.js</code> and save to reload.
   14       </p>
   15     </div>
   16   );
   17 };
   18
   19 export default App;
src/App.js|5 col 19 error| Unexpected block statement surrounding arrow body. (arrow-body-style)

今度はエラーが出てarrowを使うならボディスタイルを守りなさいって。
ちなみに、Reactのコンソールではエラーや警告表示にならない。

これ以上手を出してもまたエラーや警告になりそうで、諦めた。
そもそもES6のclass式が好きな僕はstateless functionだと言われて修正することに違和感があった。
.jsと.jsxの拡張子の区分も要らない。

そんなわけで、.eslintrcを下記のように修正した。

"rules": {
    "react/prefer-stateless-function": 0,
    "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"]  }],
}

エラーや警告表示が消えてスッキリ!

  1 import React, { Component } from 'react';
  2 import logo from './logo.svg';
  3 import './App.css';
  4
  5 class App extends Component {
  6   render() {
  7     return (
  8       <div className="App">
  9         <div className="App-header">
 10           <img src={logo} className="App-logo" alt="logo" />
 11           <h2>Welcome to React</h2>
 12         </div>
 13         <p className="App-intro">
 14           To get started, edit <code>src/App.js</code> and save to reload.
 15         </p>
 16       </div>
 17     );
 18   }
 19 }
 20
 21 export default App;

少し冗長な感じだがいいではないか!
わかりやすいコードが一番いいのだ。

15
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
3