首頁  >  問答  >  主體

將標題重寫為:在Vue 3中,如何使用SSR將資料從Node.js傳遞

<p>我正在使用vue.js 3建立一個網站,我想使用伺服器端渲染。我還想能夠從我的fastify(或express)伺服器傳遞資料給vue.js 3。有沒有辦法可以做到這一點(我看到了一個叫做express-vue的東西:github鏈接,但它是為vue 2而不是官方的,所以我不知道它是否好用)?而且你能否包含客戶端的hydration,因為我看到了一些例子,例如https://github.com/moduslabs/vue3-example-ssr,但它不包括客戶端的hydration,如果這不可能的話,我會使用ejs,但我更喜歡vue 3。你能給我一個範例或模板嗎?提前謝謝! </p>
P粉078945182P粉078945182420 天前575

全部回覆(1)我來回復

  • P粉336536706

    P粉3365367062023-08-26 09:55:40

    您可以將上述內容翻譯成中文:

    <p>您可以将上下文对象传递给renderToString函数</p>
    <pre><code>const context = { data: 'Hello world' } // 您想要共享的数据
    const html = renderToString(App, context)
    </code></pre>
    <p>在Vue组件中,可以使用useSSRContext来访问此对象</p>
    <pre><code>setup() {
        if (typeof window === 'undefined') {
            const context = useSSRContext()
            console.log(context.data) // Hello world
        }
    }
    </code></pre>
    <p>与Vue 2不同,您无需在<div id="app">中添加data-server-rendered="true",当您在浏览器上使用createSSRApp而不是createApp时,Vue 3会自动进行客户端渲染</p>
    <hr />
    <p>要在浏览器中传递对象,您需要在从服务器返回结果时将其写入<head>中的window变量中</p>
    <pre><code>const html = renderToString(App, context)
    
    res.send(`
        <html>
        <head>
            <script>window.context = ${JSON.stringify(JSON.stringify(context))}</script>
        </head>
            <body><div id="app">${html}</div></body>
            <script src="main.js"></script>
        </html>
    `)
    </code></pre>

    回覆
    0
  • 取消回覆