好程序员web前端培训学习笔记Vue学习笔记之二

简介:

  好程序员web前端培训学习笔记Vue学习笔记之二,服务端渲染
  什么是服务器端渲染 (SSR)?
  Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序。
  服务器渲染的 Vue.js 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行。
为什么使用服务器端渲染 (SSR)?
更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面。
更快的内容到达时间 (time-to-content),特别是对于缓慢的网络情况或运行缓慢的设备。
Vue SSR初体验
.安装
npm install vue vue-server-renderer --save
.渲染一个 Vue 实例
// 第 1 步:创建一个 Vue 实例const Vue = require('vue')const app = new Vue({
template: <div>Hello World</div>})// 第 2 步:创建一个 rendererconst renderer = require('vue-server-renderer').createRenderer()​// 第 3 步:将 Vue 实例渲染为 HTMLrenderer.renderToString(app).then(html => {
console.log(html)}).catch(err => {
console.error(err)})

Nuxt.js
1.Nuxt.js介绍与安装
https://zh.nuxtjs.org/guide
npx create-nuxt-app <项目名>
服务端渲染, 解决首屏加载速度, 和 seo问题
//如果出现错误 HTMLElement is not define ​修改nuxt.config.js 中pluginsplugins: [

// '@/plugins/element-ui',    { src: '@/plugins/element-ui', ssr: false}
]
//不要复制 , 编码有问题
  1. Nuxt.js的配置
    https://zh.nuxtjs.org/guide/configuration
  2. 路由
    Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。

(1) 要在页面之间使用路由,我们建议使用 标签。 支持activeClass ,tag
(2)
pages/--| user/-----| index.vue-----| one.vue--| index.vue​​那么,Nuxt.js 自动生成的路由配置如下:​router: {
routes: [

{
  name: 'index',
  path: '/',
  component: 'pages/index.vue'
},
{
  name: 'user',
  path: '/user',
  component: 'pages/user/index.vue'
},
{
  name: 'user-one',
  path: '/user/one',
  component: 'pages/user/one.vue'
}

]}​

(3)嵌套路由
创建内嵌子路由,你需要添加一个 Vue 文件,同时添加一个与该文件同名的目录用来存放子视图组件。
Warning: 别忘了在父组件(.vue文件) 内增加 用于显示子视图内容。
pages/--| film/-----| nowplaying.vue-----| comingsoon.vue--| film.vue

(4)重定向

  1. nuxt.config.js
    router:{

    extendRoutes (routes, resolve) {
      routes.push({
        path: '/',
        redirect: '/film'
      })
    }

    }

  2. 利用中间件来处理
    // 中间件 middle/ redirect.js
    export default function({ isHMR, app, store, route, params, error, redirect }) {
    if (isHMR) return
    // 页面均放在_lang文件夹下,即lang为动态路由参数
    /*if (!params.lang) { //此写法会出现路由重定向次数过多的问题

    return redirect('/' + defaultLocale + '' + route.fullPath)

    }
    */

    if(route.fullPath == '/film') {
      return redirect('/film/nowplaying')
    }

    }
    router: {

    middleware: 'redirect'  // 即每次路由跳转会调用该中间件

    //多个中间件写法
    // middleware: ['redirect']
    }
    (5) 动态路由

必须加下划线 (文件夹也可以加下划线(多级嵌套), 文件也可以加下划线)
​pages/--| detail/-----| _id.vue​​//编程式跳转 this.$router.push("/detail");

(6) 获取动态路由参数

asyncData({params}){

console.log(params.id);

}

  1. 视图
    在layout 里面 写好default.vue 可以认为这是根组件的模板了,

所有的组件都加在里面, 但是有些页面 可能不一样,就可以使用 个性化定制页面。
举个例子 layouts/template.vue:

<div>这个页面不需要导航栏</div>
<nuxt/>

​在 pages/detail.vue 里, 可以指定页面组件使用 template 布局。​
  1. 异步数据与资源文件
    (1) 如果组件的数据不需要异步获取或处理,可以直接返回指定的字面对象作为组件的数据。

​export default {
data () {

return { foo: 'bar' }

}}

(2)使用 req/res(request/response) 对象
在服务器端调用asyncData时,您可以访问用户请求的req和res对象。在当前页面刷新, 服务端执行此函数从其他页面跳转过来,客户端执行此函数​export default {
async asyncData ({ req, res }) {

// 请检查您是否在服务器端    // 使用 req 和 res    if (process.server) { //判断是否在服务器被调用        //process.client 判断是否在客户端被调用     return { host: req.headers.host }
}​
return {}

}}​

(3)错误处理
Nuxt.js 在上下文对象context中提供了一个 error(params) 方法,
你可以通过调用该方法来显示错误信息页面。params.statusCode 可用于指定服务端返回的请求状态码。
以返回 Promise 的方式举个例子:
export default {
asyncData ({ params, error }) {

return axios.get(`https://my-api/posts/${params.id}`)
.then((res) => {
  return { title: res.data.title }
})
.catch((e) => {
  error({ statusCode: 404, message: 'Post not found' })
})

}}

(4)反向代理的配置 (重启服务器)
npm i @nuxtjs/proxy -D在 nuxt.config.js 配置文件中添加对应的模块,并设置代理​
modules: [

'@nuxtjs/axios',  //添加axios    '@nuxtjs/proxy'   //添加proxy模块  ],

axios: {

proxy: true

},
proxy: {

'/api': {
  target: 'http://example.com',
  pathRewrite: {
    '^/api' : '/'
  }
}

}​这样就配置好了webpack的反向代理。为了在服务端和客户端都工作, 需要​axios.get((process.server?'https://h5.ele.me':'')+"/restapi/shop......e&terminal=h5").then(res=>{

  console.log(res.data)})​如果上线了, 需要在node中配置好 http-proxy-middleware 就工作了。
  1. vuex状态树 ( 注意:重启服务器 )
    (1)需要添加 store/index.js 文件,并对外暴露一个 Vuex.Store 新的实例

每次访问都要返回一个实例, 防止交叉请求状态污染
import Vue from 'vue'import Vuex from 'vuex'​Vue.use(Vuex)​const store = () => new Vuex.Store({​
state: {

counter: 0

},
mutations: {

increment (state) {
  state.counter++
}

}})
(2)fetch 方法用于在渲染页面前填充应用的状态树(store)数据,
与 asyncData 方法类似,不同的是它不会设置组件的数据。
如果页面组件设置了 fetch 方法,它会在组件每次加载前被调用(在服务端或切换至目标路由之
前)。
export default {
async fetch ({ store, params }) {

let { data } = await axios.get('http://my-api/stars')
store.commit('setStars', data)

}}​//当然这个异步请求 也可以在actions中做异步​

await store.dispatch('GET_STARS');

}}​//store/index.js​export const actions = {
async GET_STARS ({ commit }) {

const { data } = await axios.get('http://my-api/stars')
commit('SET_STARS', data)

}}
(3)vuex 还是非父子以及状态快照的作用
// 访问 还是 通过 this.$store.state.list​async fetch({store}){​

if(store.state.list.length){
    return;
}​
//数据请求部分 }​
相关文章
|
1月前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
50 3
|
23天前
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
14天前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
27 6
|
22天前
|
消息中间件 前端开发 JavaScript
探索微前端架构:构建现代Web应用的新策略
本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
|
1月前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
1月前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
34 3
|
1月前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
46 2
|
19天前
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
160 2
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
45 0