在使用Vue.js構建時,有時需要在服務器端呈現頁面(例如:首次渲染或SEO目的),這才需要使用Vue SSR。在Vue SSR中,先把頁面在服務器上渲染好,最終交給客戶端,以提供更好的用戶體驗。
Vue SSR的核心是把Vue實例在服務器端渲染為HTML字符串,并將其作為靜態資源發送回客戶端。下面是一個Vue SSR的搭建教程。
要使用Vue SSR,我們需要將Vue實例渲染為HTML字符串。Vue SSR的核心在于使用Vue的createRenderer函數。
```
//創建一個renderer
const renderer = Vue.createRenderer({
template: `{{title}} {{html}}`,
directives: {
//例如v-if,v-for等等..
}
})
```
在這里,我們可以看到renderer調用了createRenderer函數,其中的模板是將HTML標記在Vue模板字符串中替換為Vue數據。同時,在此模板中可以使用Vue指令,比如v-for,v-if等。
接下來,我們需要將Vue實例轉化為HTML字符串。為此,我們需要使用Vue的renderToString函數。
```
renderer.renderToString(app, context, (err, html) =>{
if (err) {
res.status(500).end('Internal Server Error')
return
}
res.end(html)
})
```
在這里,app是由Vue實例創建的。context是由服務器傳遞的上下文信息。renderToString函數使用這兩個參數,并在回調函數中返回HTML字符串。
現在,我們已經有了一個通過Vue SSR渲染頁面的函數。接下來,將這個函數放到服務器上,以通過HTTP請求的方式獲取HTML。
```
app.get('*', (req, res) =>{
const app = new Vue({
data: {
title: 'Vue SSR Tutorial',
html: 'Hello, world!'
},
template: `{{title}} {{html}}`
})
renderer.renderToString(app, (err, html) =>{
if (err) {
res.status(500).end('Internal Server Error')
return
}
res.end(html)
})
})
```
在這里,我們使用了Express框架作為服務器。我們將使用Vue創建了一個app,并在template中傳入數據和模板。隨后,我們將app傳遞給renderToString函數,并將返回的HTML發送到客戶端。
現在我們已成功的使用Vue SSR搭建了一個服務器端渲染的Vue頁面。在此過程中,我們通過createRenderer函數定義一個renderer,由它來渲染我們的Vue實例。最后通過Express框架將渲染后的HTML發送給客戶端。
需要注意的是,Vue SSR需要Node.js環境支持,所以需要在服務器上安裝Node.js。
總體而言,Vue SSR是一個非常強大的前端渲染工具,它可以使頁面更具SEO友好性、提高首次渲染速度、提高用戶體驗,提供多種指令操作,以便開發人員可以非??斓牡玫搅己玫捻撁妗?/div>
上一篇vue 拖動排序tab