iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Modern Web

30 天淺入淺出 Next.js 13系列 第 15

Day15 - Template 它很像但不是 Layout

  • 分享至 

  • xImage
  •  

Template 是什麼

templatelayout 非常的相似,都是用來顯示共享 UI,也可巢狀的使用它。

差別只在於 template 在每次換頁時會重新生成一個實例,所以當中的狀態是不會保留的。

它最後輸出的結果會類似於底下的形式,在每次換頁時 key 都會因為 route 更改的不同,重新再渲染一次

<Layout>
  {/* Note that the template is given a unique key. */}
  <Template key={routeParam}>{children}</Template>
</Layout>

Template 使用方式

  • 建立 template 檔案

  • export default with children

export default function Template({ children }: { children: React.ReactNode }) {
  return <div>{children}</div>
}

Template 適合做什麼

每一頁都需要獨立的狀態

某些 useEffect 是每次換頁時都要觸發,或是需要某些 state 是換頁時需要重新計算的。

不想使用框架預設的行為

比方說 layout 只有在首次選染時會渲染 Suspensefallback UI,之後換頁就不會再重新渲染 fallback UI 的部分。

但使用 template 就可以在每次換頁時都顯示 Suspencefallback UI。

參考資料


上一篇
Day14 - Layout 為頁面建立共用 UI
下一篇
Day 16 - loading 在頁面讀取時先顯示預設 UI
系列文
30 天淺入淺出 Next.js 1321
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言