同構渲染
所謂同構渲染,就是服務端構建頁面並且渲染成html之後返回客戶端,這裡面的問題在於,同構渲染是需要獲取動態渲染,然後返回靜態頁面的。
在服務端渲染前獲得請求到的資料
nuxt3 官方推薦的方式是使用 useFetch 函式,相比於 axios,它只會進行一次請求,不需要去區分 服務端請求和客戶端請求。
而在實際使用過程中,如果使用 async await 的方式 呼叫 useFetch 函式並獲取資料。然後賦值給響應式物件,會報錯。
我最初的做法,是在寫在 onMounted 函式中,這樣就變成了客戶端請求,雖然可以拿到頁面,但是這時候已經不是同構渲染了,不利於SEO。
經過不斷探索和測試,解決辦法其實很簡單,那就是透過攔截器。
上述程式碼,我在禁用了瀏覽器的js功能後,依然能夠正常顯示 v-for 的相關內容,檢視頁面結構,也確實存在相關div,說明伺服器返回的就是已經渲染了動態請求的資料之後的靜態頁面。
當然,如果在專案中使用,應該是要進行必要的封裝。