Vue Server Renderer是一個Vue.js官方提供的庫,用于將Vue組件渲染成HTML字符串。它主要針對服務器渲染(SSR),將Vue組件轉換為HTML字符串,以便于搜索引擎抓取和提高SEO效果。
Vue SSR的核心是Vue實例,在客戶端渲染中,Vue實例處理DOM元素的創建和更新,而在服務器端渲染中,Vue實例負責將組件渲染成HTML。Vue SSR中,使用createRenderer函數創建Renderer實例,通過renderToString或renderToStream方法將Vue組件渲染為HTML字符串。
const renderer = require('vue-server-renderer').createRenderer({ template: require('fs').readFileSync('./index.html', 'utf-8') }) // renderToString方法將組件渲染成HTML字符串 const app = new Vue({ template: 'Hello World' }) renderer.renderToString(app, (err, html) =>{ if (err) throw err console.log(html) })
其中createRenderer方法的參數中包含template,這是一個HTML字符串,它是在Vue實例中渲染組件時使用的模板。在上例中,我們將index.html文件的內容讀取到template中。我們將其指定為模板,是因為在服務器端渲染時,Vue需要知道HTML頁面的結構,以便于向其中插入被渲染過后的組件。
如果你使用的是單文件組件,可以使用vue-loader或單純的webpack來編譯成一個JavaScript模塊。然后,可以直接在Node.js中引入和使用,不需要將其編譯成HTML字符串。
在Vue SSR中,還需要注意組件的data選項。在服務器端渲染時,每個請求都有應該有一個新的Vue實例;但對于相同的組件,也需要保證其data選項是獨立的。這就需要在創建Vue實例時,通過工廠函數或構造函數等方式,確保每個實例都有獨立的data。
Vue SSR不僅可以用于服務器端渲染,還可以用于客戶端渲染的氵此。特別是在應用程序中,可以首先通過服務器端渲染來優化初始加載速度和SEO,然后在客戶端通過hydration方式進行“補水”。