delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

【Reactの勉強】JSのimport/export時のESLintのエラー対応

概要

前回に引き続き、以下の日本大学文理学部情報科学科の教授の方がクリエイティブ・コモンズで公開してくださっているチュートリアルをやっていく。

zenn.dev

今回は「サーバーからのデータ取得」のセクションをやっていたところ、JSのimport/exportの書き方でESLintでエラーが出て対応したのでメモ。

バージョン

「Reactの勉強」で使用している主なソフトウェアのバージョンは以下の通り。

  • node: 15.5.0
  • react-create-app: 4.0.1
  • react: 17.0.1
  • react-dom: 17.0.1
  • typescript: 4.1.3
  • eslint: 7.17.0
  • prettier: 2.2.1
  • stylelint: 13.8.0

結論

以下のように書かないとESLintでエラーになった。

  • 「src/api.ts」では「default export」を使用する。
  • 「src/App.tsx」では波括弧を使わずにfetchImages関数をimportする。

具体的なコードは以下

[src/api.ts]

const fetchImages = async (breed: string): Promise<string[]> => {
  // 省略
};
export default fetchImages;

[src/App.js]

import fetchImages from './api';

詳細

exportについて

まず、チュートリアルと同じく以下のように、関数宣言の前にexportをつけると、ESLintで「Prefer default export.」というエラーが出てしまう。

export const fetchImages = async (breed: string): Promise<string[]> => {
  // 省略
};

f:id:kamatimaru:20210126231953p:plain

では、「default」を付ければよいのかというとそういう訳ではなかった。

以下のstack overflowの記事にもあるように、export default constという構文はシンタックスエラーになってしまう。

stackoverflow.com

従って、以下のように、ファイルの最後でexport defaultする必要があった。
こうすると、ESLintのエラーが出なくなる。

const fetchImages = async (breed: string): Promise<string> => {
  // 省略
};
export default fetchImages;

importについて

チュートリアルと同じく以下のように、波括弧でモジュールをimportするとESLintで以下のエラーが発生する。

import { fetchImages } from './api';

f:id:kamatimaru:20210126233316p:plain

デフォルトエクスポートされたモジュールをimportする場合は、モジュール名を波括弧で囲ってはいけないらしい。

以下のように波括弧を外すとエラーが消える。

import fetchImages from './api';

以下、Mozillaの公式ドキュメント
developer.mozilla.org

以上