概要
前回に引き続き、以下の日本大学文理学部情報科学科の教授の方がクリエイティブ・コモンズで公開してくださっているチュートリアルをやっていく。
今回は「サーバーからのデータ取得」のセクションをやっていたところ、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]
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[]> => { // 省略 };
では、「default」を付ければよいのかというとそういう訳ではなかった。
以下のstack overflowの記事にもあるように、export default const
という構文はシンタックスエラーになってしまう。
従って、以下のように、ファイルの最後でexport default
する必要があった。
こうすると、ESLintのエラーが出なくなる。
const fetchImages = async (breed: string): Promise<string> => { // 省略 }; export default fetchImages;
importについて
チュートリアルと同じく以下のように、波括弧でモジュールをimportするとESLintで以下のエラーが発生する。
import { fetchImages } from './api';
デフォルトエクスポートされたモジュールをimportする場合は、モジュール名を波括弧で囲ってはいけないらしい。
以下のように波括弧を外すとエラーが消える。
import fetchImages from './api';
以下、Mozillaの公式ドキュメント
developer.mozilla.org
以上