# Nuxt3 王育成 --- # CSR vs SSR ---- ## CSR #### Client-Side Rendering #### (客戶端渲染) ---- ![](https://i.imgur.com/a2ClX3y.png) ---- - 優點 - 減少 Server 端的壓力 - 頁面切換速度快 - 缺點 - 首屏顯示慢 - SEO不佳 ---- ## SSR #### SR - Server-Side Rendering #### (伺服器端渲染) ---- ![](https://i.imgur.com/lozUVjC.png) ---- 是網頁上面呈現的內容在伺服器端就已經生成好了,當用戶瀏覽網頁時,伺服器把這個在服務端生成好的完整的html結構內容響應給瀏覽器,而瀏覽器拿到這個完整的html結構內容後直接顯示(渲染)在頁面上的過程。 --- ### 就是這樣 ### 所以有了 Nuxt ---- ### 沒錯正式進入我們的主題 ---- ### Nuxt3 --- ## 請先在你的Terminal 下 ``` node -v ``` ---- ![](https://i.imgur.com/vCYkxuk.png) ---- ### node -v的版本要在16.10之上 如果沒有的話 ---- [點此下載]( https://nodejs.org/zh-tw/download) 先把原本的版本砍掉再裝喔! ---- 裝好後創個資料夾 再 cd 進去裡面 ---- ![](https://i.imgur.com/rTrQqBB.png) ---- ## 開始裝 nuxt3的專案 ---- ### 請注意一定要在你創的資料夾內下 ``` npx nuxi init <project-name> ``` ![](https://i.imgur.com/5xfB0bz.png) ---- 再cd進去你的專案 ![](https://i.imgur.com/xiKUmaG.png) ---- ### 進去之後再下 ``` npm install ``` ``` npm run dev ``` ![](https://i.imgur.com/Un2uSow.png) ![](https://i.imgur.com/sHZlkMr.png) --- 把app.vue刪除掉後 新增一個pages的資料夾 裡面再新增兩個.vue的檔案 ![](https://i.imgur.com/Y7scmuF.png) ---- 在index.vue輸入 ``` <template> <div> <h2>I am Home page</h2> <p>Today is my birthday, Today is not my birthday. </p> <p>Today is not my birthday, Today is my birthday.</p> </div> </template> ``` ---- 在about.vue輸入 ``` <template> <div> <h2>I am about page</h2> <p>You should give me a gift, you should not me give a gift. </p> <p>You should not give me a gift, you should give me a gift. </p> </div> </template> ``` ---- 看一下你的網頁 在local3000的地方 預設是出現index.vue ---- 如果你直接在網址後面多加 /about 就會出現about.vue的內容 ---- 那如果你不是打/about 而是 / products? ---- 沒錯你會看到一個404的錯誤 --- 在pages底下再新增一個資料夾 並建立兩個.vue的檔案 ![](https://i.imgur.com/FjrMlJj.png) ---- 在products裡的index.vue內輸入 ``` <template> <div> <h2>I am Products</h2> <p>Choice an object as my birthday gift.</p> <p>Don't choice an object as my birthday gift.</p> </div> </template> ``` ---- 在[id].vue中輸入 ``` <template> <div> <h2>Product for {{ }}</h2> </div> </template> <script setup> const {}= useRoute().params </script> ``` ---- 請問const{ } 和 {{}}要填入甚麼 可以達到下圖的效果 ![](https://i.imgur.com/fHILxXN.png) --- 再專案內新增一個layouts的資料夾 並新增一個default.vue檔 ![](https://i.imgur.com/GdKy3Ko.png) ---- 再default.vue中輸入 ``` <template> <div> <header> <nav> <ul> <li><NuxtLink to ="/about">about</NuxtLink></li> <li><NuxtLink to ="/products">Products</NuxtLink></li> <li><NuxtLink to ="/">Home</NuxtLink></li> </ul> </nav> </header> <div> <slot /> </div> </div> </template> ``` ---- 之後再到在新增一個products的lyaouts ---- ``` <template> <div> <div> <slot /> </div> <footer> <nav> <ul> <li><NuxtLink to ="/about">about</NuxtLink></li> <li><NuxtLink to ="/products">Products</NuxtLink></li> <li><NuxtLink to ="/">Home</NuxtLink></li> </ul> </nav> </footer> </div> </template> <style> .router-link-active{ color:red } li{ font-size: 25px; } </style> ``` ---- 最後再到[id].vue跟index.vue中輸入 ---- ``` definePageMeta({ layout :'products' }) ```
{"metaMigratedAt":"2023-06-18T00:04:06.650Z","metaMigratedFrom":"YAML","title":"Nuxt3","breaks":true,"contributors":"[{\"id\":\"8b6d0fd5-8ed5-4e00-ae0f-9a0e93b8250b\",\"add\":3572,\"del\":43}]"}
    65 views