React.jsを書き始めてよく見るimportとexportですが、良く分からず使っていると後々困りそうだなーと思ってきたのでハックに残しておきます。
Export編
モジュールの返し方は以下の3つがあるらしい。
1. named export: 複数の値をobjectで返す
2. default export: 単一値を返す
3. named exportと, default exportの混在: 単一値と複数値の両方を返す
1. named export: 複数の値をobjectで返す
Objectで返すというところがポイント。
const foo = "abc" function hoge() { return "ABC" }; export { foo, hoge }
2. default export: 単一値を返す
よく見るやつです。ファイル内で一回しか使えない。
export default class MyClass { // 名前のあるクラス foo() { return "FOO" } } // ReactNativeでよく見る export default class SampleApp extends Component { render() { return ( //Component ); } } //もちろん以下のような単一値も返せる export default {id:1}
3. named exportと, default exportの混在: 単一値と複数値の両方を返す
1,2のようなコードが一つのjsファイルに混在しているイメージ。返り値は以下のようになる。
{ "default": 単一値, // default exportされた値 複数値1の名前: 複数値1, // named exportされた値1 複数値2の名前: 複数値2, // named exportされた値2 __esModule: true }
Import編
var hoge = require(‘./hoge.js’); とかもう時代遅れです。今回は、ReactNativeで必ず見る以下のコードから解説です。
import { AppRegistry, StyleSheet, Text, View } from 'react-native'; import React, { Component } from 'react';
モジュールの返し方が3つあるので、それに対応してimportの仕方も3つあります。
1. named exportされたモジュールのimport
書式
(1) import { 識別子1、識別子2 } from “モジュール指定(path)”
(2) import { * as X } from “モジュール指定” //複数値をすべてXという名で取り込む
import { AppRegistry, StyleSheet, Text, View } from 'react-native';
識別子は何でも良いわけではなくexportの際のを用いる。
また、node_module内のモジュールは「./」とかで始めなくていいらしい。
2. default exportされたモジュールのimport
書式
import 単一値を受けとる識別子 from “モジュール指定(path)”
import App from './src/app'
識別子は何でもよい。新しい名前を設定できる。
3. default & named exportされたモジュールのimport
書式
import 単一値を受けとる識別子, { 識別子1, 識別子2 } from “モジュール指定(path)”
import React, { Component } from 'react';
参考
超が付くほどわかりやすかったので、是非一読をおススメします。
ES6のモジュールを解説してみた