iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

30 天線上自學前端系列 第 37

[Day 37] [React] JavaScript ES6 - import、export、module 的簡單介紹

  • 分享至 

  • xImage
  •  

過去幾天練習中頻繁使用到 import 和 "react"、"react-dom",今天的課程要來說明這背後所發生的事情。

https://ithelp.ithome.com.tw/upload/images/20221007/20151588NogXUMl8HW.png

這篇的 Key words:

  • import
  • export
  • export default
  • import naming

為了說明可以比較清楚,先在資料夾裡面做一個 math.js,設定一個變數名稱,並且 export defult

const pi = 3.1415962;
export default pi;

然後回到 index.js,想要在這邊輸入 math.js 的變數內容,就像是在設定輸入 module 一樣就可以:

import pi from "./math.js";

這樣在 index.js 的 ReactDom.render 裡面這樣做就可以得到 math.js 裡面的 pi 內容:

ReactDOM.render(
  <ul>
    <li>{pi}</li>
  </ul>,
  document.getElementById("root")
);

這邊可以特別留意的是,import 後面不一定要跟原本的變數名稱一樣是 pi,可以設定任何喜歡的名字,只要在後面不要打錯就可以了;原因是在 math.js 裡面設定的是 export default pi;


如何從其他 js 檔案一次輸入很多東西呢?像是變數、功能。

從剛剛的 math.js 繼續編輯下去,可以多加一個 export

const pi = 3.1415962;

function doublePi() {
  return pi * 2;
}

function triplePi() {
  return pi * 3;
}

export default pi;
export { doublePi, triplePi };

回去 index.js 編輯 import,加入 doublePi()triplePi()

ReactDOM.render(
  <ul>
    <li>{pi}</li>
    <li>{doublePi()}</li>
    <li>{triplePi()}</li>
  </ul>,
  document.getElementById("root")
);

另外需要注意的是,這邊的 doublePi()triplePi() 不能隨意改變名字,因為這樣 index.js 會沒法從其他檔案中辨識。

最後是前些時候在用 Node.js 時,import 語法不太一樣。
現在我們是用 ES6,所以還是使用 ES6 的語法比較好,雖然這兩個目前看起來是可以正常運作且作用相同,但還是有很多相同作用的語法,但是是特別特定的語法編輯的方式。

Node.js 和 ES6 的 import 比較:

import React from "react";
var react = require("react");

如果想要輸入整個檔案裡面的東西呢?

除了剛剛的方式,也可以用「*」來表示 all:

import * as pi from "./math.js";

ReactDOM.render(
  <ul>
    <li>{pi}</li>
    <li>{doublePi()}</li>
    <li>{triplePi()}</li>
  </ul>,
  document.getElementById("root")
);

不過這時是會報錯的,console.log 後會發現 pi 是一個內有多個 properties 的 Object:

ReferenceError: co is not defined
{doublePi: ƒ doublePi(), triplePi: ƒ triplePi(), default: 3.1415962}

所以這時應該要改為 as 後面的名稱 + default 或是「 . 」。我這邊是設定為 * as Kitty

import * as Kitty from "./math.js";


ReactDOM.render(
  <ul>
    <li>{Kitty.default}</li>
    <li>{Kitty.doublePi()}</li>
    <li>{Kitty.triplePi()}</li>
  </ul>,
  document.getElementById("root")
);

上一篇
[Day 36] [React] React components 練習
下一篇
[Day 38] [React] JavaScript ES6 - import、export、module 的小練習
系列文
30 天線上自學前端72
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言