vue的服务端渲染,前端中高级岗面试为何越来越难,vivo前端面试

})

}

export default {

layout: ‘users’,

async asyncData() {//这个会在beforeCreate生命周期钩子之前执行

console.log(process.server); //返回true就是在服务端执行了

//使用async await

const users = await getUsers();

//return的数据会和data合并

return { users };

},

}

注意事项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

?上下文对象的使用:

在pages下的users下的detail.vue中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不传入id就爆了我们需要的错误

?整合axios

如何安装nuxt是没选择axios,那么我们就要整合一下了!

npm install @nuxtjs/axios -S

再在nuxt.config.js里配置,用来解决跨域的问题

modules: [

// Doc: https://axios.nuxtjs.org/usage

‘@nuxtjs/axios’,

],

/*

** Axios module configuration

** See https://axios.nuxtjs.org/options

*/

axios: {

proxy: true

},

proxy:{

“/api”: “http://localhost:3001/”

},

当然如果所有页面都启用了ssr那么自然也就不需要跨域了,但通常大家都是首屏启用了ssr,其他页面仍是单页面,所有应当配置跨域

server目录下建立api.js,定义我们的后端接口,需要安装koa,koa-router,全局安装nodemon,装了就不需要

const koa = require(“koa”)

const app =new koa()

const Router = require(“koa-router”)

const router = new Router({prefix:‘/api/users’}) //请求地址

const users = [{name:‘tom’,id:1},{name:‘jey’,id:2}]

router.get(‘/:id’,ctx => {//带个参数id

const user = users.find(u => u.id == ctx.params.id)

if(user){

ctx.body = {ok:1,user}

}else{

ctx.body = {ok:0}

}

})

app.use(router.routes())

app.listen(3001)

nodemon api.js来启动这个服务

_id.vue中

用户id:{{ $route.params.id }}

{{ user.name }}

注意我注释掉的东西,效果如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

?拦截器实现

nuxt.config.js里配置

plugins: [

‘~/plugins/axios’

],

在plugins目录下建立axios.js

//前端请求自动加上token

export default function({ $axios }){

//onRequest为请求拦截器帮助方法

$axios.onRequest(config => {

if(!process.server){

// config.headers.token = localStorage.getItem(‘token’)//将来是这个操作

config.headers.token = ‘jiba’

}

})

}

这样就完成了一个拦截器,效果看下图network的token

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vuex


应用根目录下如果存在store目录,Nuxt.js将启用vuex状态树。

定义各状态树时具名导出state,mutations,getters,actions即可

注意:也是直接用的,不需要去配置什么,详情看下面教程

在store目录下建立index.js

//因为是具名导出,所以state必须是state,mutations必须是…

export const state = () => ({

count: 0

})

export const mutations = {

increment(state) {

state.count ++

}

}

在store目录下建立users.js

export const state = () => ({

list: []

})

export const mutations = {

set(state,list) {

state.list = list;

},

add(state,name) {

state.list.push({name})

}

}

在pages目录下建立mine.vue

我的

    • {{user.name}}
    • 注意:

      1.此fetch非彼fetch

      2.store下的index.js是基石,store会自动生成为这个样子

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      3.fetch的commit后的有规则

      Vue SSR 实战首屏渲染(当然比起nuxt这样很麻烦)


      ?先创建个vue的项目

      vue create ssr

      ?安装vsr(vue的server渲染器)

      npm install vue-server-renderer --save

      ?一个简单的实例,单独建立个server.js

      const express = require(‘express’)

      const vue = require(‘vue’)

      const app = express()

      const renderer = require(‘vue-server-renderer’).createRenderer()

      const page = new vue({

      data:{

      name: “开课吧”,

      count: 1

      },

      template: `

      {{name}}

      {{count}}

      `

      })

      app.get(‘/’,async function(req,res){//进入这个页面会将组件转为字符串发给前端在页面

      const html = await renderer.renderToString(page)

      res.send(html)

      })

      app.listen(3000,()=>{

      console.log(‘启动成功’)

      })

      效果会是这样

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      ?在vue中构建步骤

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      首先webpack会把资源会打包成两个包,一个服务,一个客户端,用户访问服务后根据客户端知道找谁,把相应的html渲染出来

      通常前端都是vue单文件组件,用vue-loader构建,所以ssr环境需要webpack怎么操作呢?下面讲解

      路由vue-router

      单页面应用的页面路由,都是前端控制,后端只负责提供数据

      一个简单的单页应用,使用vue-router,为了方面前后端公用路由数据,我们新建router.js,对外暴露createRouter

      npm i vue-router -S

      在src下建立router.js

      import Vue from ‘vue’

      import Router from ‘vue-router’

      import Index from ‘./components/Index’

      import Kkb from ‘./components/Kkb’

      Vue.use(Router)

      export function createRouter () {

      return new Router({

      routes: [

      {path: ‘/’,component: Index},

      {path: ‘/kkb’,component: Kkb}

      //…

      ]

      })

      }

      在components目录下建立Index.vue组件和Kkb.vue

      //index

      hi,{{ name }}

      //kkb

      hi,{{ name }}

      再App.vue中使用路由

      Vue logo
      • 首页
      • 开课吧
      • csr和ssr设置统一入口

        src下建立createapp.js

        import Vue from ‘vue’

        import App from ‘./App.vue’

        import { createRouter } from ‘./router’

        export function createApp (context) {//context是服务器传来的请求对象

        const router = createRouter()

        const app = new Vue({

        router,

        context,

        render: h => h(App)

        })

        return { app,router }

        }

        main.js里这么做

        import Vue from ‘vue’

        import App from ‘./App.vue’

        import { createApp } from ‘./createapp’

        const { app,router } = createApp()

        Vue.config.productionTip = false

        router.onReady(()=>{

        app.mount(“#app”)

        })

        // new Vue({

        // render: function (h) { return h(App) },

        // }).$mount(‘#app’)

        再在src下建立entry-server.js

        import { createApp } from ‘./createapp’

        export default context => {

        //我们返回一个promise

        //确保路由或者组件准备就绪

        return new Promise((resolve,reject) => {

        const { app,router } = createApp(context)

        router.push(context.url)

        router.onReady(()=>{

        resolve(app)

        },reject)

        })

        }

        服务端渲染,我们需要能够处理.vue组件,所以需要webpack的支持

        小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

        深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
        因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

        img
        img
        img
        img

        由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

        如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
        img

        性能优化

        1.webpack打包文件体积过大?(最终打包为一个js文件)

        2.如何优化webpack构建的性能

        3.移动端的性能优化

        4.Vue的SPA 如何优化加载速度

        5.移动端300ms延迟

        6.页面的重构

        所有的知识点都有详细的解答,我整理成了280页PDF《前端校招面试真题精编解析》。

        开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】


        …(img-t6veUN79-1710850898891)]
        [外链图片转存中…(img-NjPsgEZB-1710850898891)]
        [外链图片转存中…(img-9PJgmD6Q-1710850898892)]
        [外链图片转存中…(img-pQGSomeW-1710850898892)]

        由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

        如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
        [外链图片转存中…(img-6lUH1jlN-1710850898892)]

        性能优化

        1.webpack打包文件体积过大?(最终打包为一个js文件)

        2.如何优化webpack构建的性能

        3.移动端的性能优化

        4.Vue的SPA 如何优化加载速度

        5.移动端300ms延迟

        6.页面的重构

        所有的知识点都有详细的解答,我整理成了280页PDF《前端校招面试真题精编解析》。

        开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

      • 25
        点赞
      • 18
        收藏
        觉得还不错? 一键收藏
      • 0
        评论

      “相关推荐”对你有帮助么?

      • 非常没帮助
      • 没帮助
      • 一般
      • 有帮助
      • 非常有帮助
      提交
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值