09-15-2021
在建立完新的專案後,在資料夾中會發現有一個名字叫做pages
的資料夾,這是我們現在要講的主題!
我們可以使用: .js
、jsx
、.ts
、.tsx
,各種JavaScript的寫法輸出component的頁面。
每一個在pages
中的檔案都會是以pages
當作路徑。
// 假設在pages有一個cat.js頁面
// 那麼cat.js的路徑就會是:`/cat`
function Cat(){
return <div>Cat</div>
}
expert default Cat
在next.js 中無法使用/apple/:id
的參數路由的方式得到參數,只能透過query
的方式獲取到參數,/apple/[pid].js
的方式,頁面網址會匹配頁面:apple/1
、apple/2
。
// /apple/1
{"id":"1"}
// /apple/1?pid=abc
pages/cat/[pid]/[comment].js
--->匹配的路徑為/pages/apple/cat-comment
[pid]在這裡的角色是,頁面
[comment]在這裡的角色,頁面內容
query的對象為:
{"pid":"apple","comment":"cat-comment"}
使用next/link
的方式
next/link
到component中Link
標籤,這邊會被編譯成a
連結
import Link from 'next/link'
function Cat() {
return (
<ul>
<li>
<Link href="/cat/abc">
<a>去吧! pages/cat/[pid].js</a>
</Link>
</li>
</ul>
)
}
export default Home
使用...
在括號內的擴展符號,可以擴展動態路徑用來獲取全部的路徑。
例如:pages/cat/[...slug].js
--->會匹配成cat/a
、cat/ab
、cat/abc
slug
也可以使用[...param]的名稱。cat/a
會有的query
對象如下,匹配的參數會作為查詢的參數在發送到頁面,並且會是一個陣列
。{"slug":["a"]}
cat/ab
{"slug":["a","b"]}
[[...slug]]
包含參數,這樣的路徑下是可以被當成可以選擇的。pages/cat/[[...slug]].js
,會匹配的路徑為/cat
、cat/a
、cat/ab
。pages/cat/[...slug].js
的差別在於,可以選擇的多重路徑也匹配不帶參數的路由。如/cat
query
會是一個空陣列