Egg Vue SSR 服务端渲染数据请求与asyncData

Egg Vue SSR 是一个基于 Egg.js 和 Vue.js 的服务端渲染项 目,它能够将 Vue.js 组件在服务端渲染完成之后再返回给客户端,在一定程度上可以提高页面的首屏渲染速度和搜索引擎的爬取效果。为了更好的支持服务端渲染,Egg Vue SSR 提供了异步数据请求方法 asyncData。

asyncData 是在服务端执行的方法,而非在浏览器端执行,它可以用来获取组件所需的异步数据,可以与 Vue 的生命周期钩子一起使用。在渲染过程中,asyncData 可以将数据注入到组件的 data 中,从而避免在异步获取数据完成之前呈现空的组件。

以下是 Egg Vue SSR 中使用 asyncData 的完整攻略:

安装依赖

在 Egg Vue SSR 项目中使用 asyncData,需要先安装依赖vuex 和 vue-router:

npm install vuex vue-router --save

创建 Store 储存数据

为了方便在组件中全局调用,可以先在服务端创建一个 Vuex Store,用于储存公共的数据。

在组件中定义 asyncData 方法

在组件中,定义 asyncData 方法用来获取异步数据。asyncData 方法接收一个 context 参数,该参数将包含一些有用的信息,例如请求对象、route对象等。L azy Load Components 可以完美复用 asyncData 模块,因为每个 module 都可以独立的到处 asyncData,并且异步请求以静态方法的形式回传到组件内部。

在服务器端请求 asyncData 数据

在服务器端,可以利用 Vuex 官方提供的 Actions 要求 dispatch 方法来进行数据请求。 在 Egg Vue SSR 中,可以通过在 Context 关联上一个 Vue SSR Renderer 实例,然后由 Renderer 实例触发 asyncData 方法来进行数据获取。

以下是一个 Egg Vue SSR 中的 asyncData 示例代码:

// 在 store 中进行异步数据获取

const actions = {
  async fetchPost({
    commit
  }, payload) {
    const {
      postid
    } = payload
    const post = await api.get(`/post/${postid}`)
    commit('setPost', post)
  }
}

export default new Vuex.Store({
  state: {},
  mutations: {},
  actions
})


// 在组件中定义 asyncData 方法

import {
  mapActions,
  mapState
} from 'vuex'

export default {
  name: 'Post',
  async asyncData({
    store,
    route
  }) {
    const {
      params
    } = route
    await store.dispatch('fetchPost', {
      postid: params.id
    })
    return {}
  },
  computed: {
    ...mapState(['post'])
  },

  methods: {
    ...mapActions(['fetchPost'])
  }
}

// 在服务器端请求 asyncData 数据

export default app => {
  const renderer = app.view.createRenderer({
    template: require('fs').readFileSync(resolve(__dirname, './app.html'), 'utf-8')
  })
  app.get('*', async (req, res) => {
    const context = {
      title: 'Egg Vue SSR',
      url: req.url
    }
    const vueOptions = {
      data: {
        title: 'Egg Vue SSR',
        url: req.url
      },
      asyncData: this.$options.asyncData
    }
    const app = new Vue({
      data: vueOptions.data,
      router: createRouter(),
      store: createStore(),
      render: h => h(App, [
        h('div', {
          attrs: {
            id: 'app'
          },
          domProps: {
            innerHTML: '',
          },
        }),
      ]),
    })
    await renderer.renderToString(app, context)
    res.write(context.state)
    res.end()
  })
}

在这个示例中,我们首先在 store 中定义了一个 fetchPost actions,用于获取 post 数据。然后在组件中,定义了asyncData 方法,用来调度 fetchPost 方法,在获取 post 数据之后将结果存储到 post state 中。

最后,我们在服务器端请求 asyncData 数据,利用 Vue SSR Renderer 实例在执行时触发 asyncData 方法,将所得数据存储到 Context state之中,最终使用到页面 SSR 渲染过程中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Egg Vue SSR 服务端渲染数据请求与asyncData - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • C#使用正则表达式抓取网站信息示例

    下面我将为你详细讲解“C#使用正则表达式抓取网站信息示例”的完整攻略。 1. 背景 当我们需要从网站上获取特定信息时,我们可以使用正则表达式来找到需要的内容。在 C# 中,可以使用 System.Text.RegularExpressions 命名空间来实现正则表达式的匹配。 2. 正则表达式基础知识 在使用正则表达式之前,我们需要了解一些基本概念: 字符集…

    JavaScript 2023年5月19日
    00
  • js正则函数match、exec、test、search、replace、split使用介绍集合

    Js正则函数match、exec、test、search、replace、split使用介绍集合 正则表达式是一种能够从文本中匹配出我们需要的信息的工具,同时在JavaScript中也提供了多个正则函数可以操作正则表达式,包括match()、exec()、test()、search()、replace()和split()。 match() match()函数…

    JavaScript 2023年6月10日
    00
  • JavaScript使用localStorage存储数据

    以下是使用localStorage存储数据的完整攻略。 什么是localStorage? localStorage是一种客户端存储数据的方式,它可以在客户端本地存储数据,是一个只有浏览器端可以访问的本地存储器。localStorage可以使网页在下一次访问时获取我们之前保存的数据。 localStorage的使用步骤 1. 存储数据 在JavaScript中…

    JavaScript 2023年6月11日
    00
  • js获取dom的高度和宽度(可见区域及部分等等)

    要获取DOM元素的宽度和高度,我们可以使用JavaScript中的clientWidth和clientHeight属性。这两个属性返回的是DOM元素的可视区域大小,不包括边框和外边距。以下是获取DOM元素宽度和高度的代码: const element = document.getElementById(‘myElement’); const elementW…

    JavaScript 2023年6月10日
    00
  • Vue3 跨域配置devServer的参数和设置方法

    Vue3 是一款流行的前端框架,它允许我们在开发中使用各种功能强大的功能,其中包括跨域请求。在本篇文章中,我将为您讲解如何在 Vue3 项目中配置 devServer 实现跨域请求。 什么是跨域请求? 在 Web 开发中,域指的是通过互联网来唯一标识一个网络资源的字符串。跨域请求则是指在客户端浏览器向服务器发起请求时,所请求的资源的域名与当前网页的域名不同,…

    JavaScript 2023年6月11日
    00
  • JavaScript中数组Array.sort()排序方法详解

    一、Array.sort()的基本使用 JavaScript中的数组拥有一个sort()方法,可以对数组进行排序。可以使用默认的排序方式,或者自己指定比较函数来进行排序。 默认排序方式 数组中所有元素将被转换为字符串,然后比较它们的UTF-16代码单元值。例如,按升序排序数组[“ banana”,“ apple”,“ lemon”]将产生[“ apple”,…

    JavaScript 2023年5月19日
    00
  • javascript document.referrer 用法

    Javascript中,document.referrer属性用于获取上一页面的URL地址。具体来说,它返回一个字符串,即访问当前页面的用户从哪个URL过来的。这个属性可以提供有用的信息,比如可以用于跟踪用户的来源,或者可以用于判断用户是否从一些关键页面跳转过来。 下面是使用document.referrer属性的完整攻略。 1. 使用document.re…

    JavaScript 2023年6月11日
    00
  • PHP实现把文本中的URL转换为链接的auolink()函数分享

    当我们在编写一些包含URL的文本内容时,我们经常需要把这些URL转换为超链接,以便用户可以直接点击链接访问网页。在PHP中,可以使用autolink()函数来实现这个功能。 以下是实现该功能的步骤: 1. 利用正则表达式匹配URL 我们需要使用一个正则表达式来匹配一个可能包含URL的文本,并将URL提取出来。以下是示例代码: function autolin…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部