step-06 异步数据一

本文介绍了在Vue应用中如何进行异步数据预读取,以优化服务器负载和用户体验。通过Vuex作为数据容器,结合路由和组件的asyncData方法,分别在服务器端和客户端实现数据的预加载。讨论了两种预读取策略:一次性获取所有数据渲染页面和视图加载后获取数据。同时,文章提供了源码链接以供深入研究。
摘要由CSDN通过智能技术生成

我们知道vue是响应式的,渲染页面的同时异步获取数据,再将的数据渲染到界面。在服务器中我们只需要服务器返回html就行,不需要响应式数据,并且响应式也会给服务器增加负载。
所以渲染html的时候需要已经获取到数据,需要对数据进行预读取。
在访问vue网站的时候,切换页面都会通过路由,路由也决定了需要访问和渲染哪些组件,这时候就需要获取到这些组件中的数据,所以数据的预读取我们就在路由中进行。
另一个就是在客户端中,在打包的文件client.bundle.js挂载(vueApp.$mount(’#app’) )到页面之前,也需要获得跟服务端一样的的数据。

我们需要一个专门的容器来存储获取到的数据,客户端和服务端都使用这个容器。
这里采用vuex来存取数据,当然你也可以自己设计一个。
src目录先创建一个store.js

import Vue from 'vue'
import Vuex from 'vue'
//fetch-data.js封装了一个获取数据的api,返回promise
import {
    fetchData } from './fetch-data.js'

Vue.use(Vuex)

export function createStore() {
   
    return new Vuex.Store({
   
        state: {
   
            item: {
   
            }
        },
        mutations: {
   
            setItem(state, {
   id, title}) {
   
                Vue.set(state.item, 'id', id)
                Vue.set(state.item, 'title', title)
            }
        },
        actions: {
   
            fetchItem(context, url) {
   
                return fetchData(url).then(res => {
   
                    context.commit('setItem', res.item)
                })
            }
        }
    })
}

也是工厂函数的方式创建。简单说一下vuex,state是用来存放数据的,mutations是用来修改数据的,通过store.commit(‘setItem’)来触发,但是不支持异步操作。
actions是用来提交mutations的,通过store.dispatch(‘fetchItem’)来触发,获取到数据后再提交mutations中的方法修改数据,主要用于异步修改数据。

//fetch-data.js

import axios from 'axios'

export function createStore(url) {
   
    return new Promise((resolve, reject) => {
   
        axios.get(url).then(res => {
   
            if (res.status === 200) {
   
                resolve(res)
            }
        }).catch(err => {
   
            reject(err)
        })
    })
}

在根目录创建backend.js文件用来启动一个后台服务,数据都从这里获取。

const Koa = require('koa')
const KoaRouter = require('koa-router')
const cors = require(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值