Contents

NUXT 入門筆記

緣起

7/2 時剛好講了一場 Nuxt 的 AppWorks School 線上分享會,準備了兩三天的內容,只用來線上分享一個小時太可惜了,一定要寫下來記錄一下才對。

但 7/1 才進新公司, TypeScriptreactredux 和一堆沒用過的 library ,加上 8 月決定要搬家所以要來賣一些不想帶走的家具,實在是有點過忙。趁著這個月的分享會到來(剛好分享 react hook),趕稿一下。

Get Start

這次入門講座以完成一個小專案為目標,並由四個部分組成:

  1. Create project

npx 安裝: npx create-nuxt-app <project-name>,安裝選項參考:

/images/20200723/001.jpg#width250

官網安裝說明: Nuxt install

  1. Directory Structure: 會在接下來的段落一一說明。

安裝完的目錄參考:

/images/20200723/002.jpg#width250

  1. Vuetify (Optional): Vue 的 UI 框架,但與 Nuxt 沒有必需的相依關係。
  2. To be continue —

Directory Structure: Layout

不同的 page 可以有不同的頁面布局,Side bar 的有無,Key Visaul 的呈現等等。

要建立一個新的 layout ,只需要在 layout 資料夾中,建立一個 .vue 檔案,並且在 <template> tag 裡面設計自己喜歡的樣板,最後只要注意記得放入 <nuxt /> 來預留空間給每個 page 的內容就完成了。

而在這層資料夾底下的 Error page 是一個特別的存在,當 user 輸入了一個沒有被設定到的 Url 時,nuxt 就會將 error page 給渲染出來。所以意義上來說他是一個 page,而非 layout,因此他也不能在 <template> tag 裡面放入 <nuxt />

範例:

Default: 預設的 Layout,首頁將會使用這個 layout。

notHomePage: 非首頁部分的 Layout。

error: error page。

為了簡單的讓大家看出差別, notHomePage 與 Default Layout 的差別是: 只更改了 appbar 的顏色,並且在第 21 行多加了一個按鈕元件而已。

Directory Structure: Pages

在 Pages 資料夾下的每個 .vue 檔案,都會依照檔名去建立一個對應的 url,而 index.vue 則是預設的首頁。例如建立一個 /pages/helloworld.vue 就可以使用 helloworld 這個 route 來看到這個 page。

範例:

index.vue: 首頁,裡面的 fetchPokemons() 是用來抓取資料的 function。

pokemons: 顯示抓回來的資料的頁面,可以看到在第 29 行設定了這一個 page 所要使用的 layout

Directory Structure: Store

Vuex 是一個用來管理 state 的 library,要在 nuxt 中使用他,只需要在 store 底下建立一個 index.js。另外 vuex 裡的 action 也可以用來處理像是拿資料這類非同步的問題。

範例:

剛剛在 index.vue 裡面有呼叫 pokemons/fetchPokemons,這是個要去 endpoint 取得資料的 action。那現在就在 store 底下建立一個 pokemons 來實踐他吧。

備註: import 進來的 GET_POKEMONS 可以在 /graphql 底下找到。

Directory Structure: Components

存放 components 的資料夾,唯一要注意的是不可以在 component 內取用非同步的資料。

範例:

PokemonCard: 顯示單隻 Pokemon 資訊的卡片,有了這個 component 就可以直接用 v-for 把拿到的 Pokemon 都用這個 component render 出來。

Bug 紀錄

build 專案的時候遇到了這個問題: /images/20200729/001.png 若沒有仔細看還看不出來兩個 Path 的斜線方向不同,還以為電腦跳針硬是把一樣的說成不一樣,猜想可能是 window 環境的 bug 吧。

/images/20200729/002.png 發現是某個 node module 裡的問題,找到問題就好解決了,幸好最後還能成功 deploy。

小結

至此 nuxt 的基本使用算都提到了,其他相關的開發文件就留給需要的人去閱讀吧 xD。附上 Demo 連結。