体验Vue3的SSR框架 - Nuxt3
创始人
2024-03-14 11:36:06
0

SSR 与 Nuxt

SSR 是 Server-Side Rendering,即服务端渲染的英文缩写。

Vue.js 是一个用于构建客户端应用的框架。默认情况下,Vue 组件的职责是在浏览器中生成和操作 DOM。在客户端是单页应用 (SPA) 。

也可以将 vue 程序在服务端渲染,渲染完成再返回给浏览器,最后在浏览器端将返回的 HTML 激活(hydrate),这个过程就是 SSR。

用 SSR 的好处:

  • 更快的首屏加载
  • 更好的 SEO

构建一套完整的 SSR 应用会很复杂,Nuxt 很好的解决了这个问题,让 Vue 的服务端渲染变得更加简单。

Nuxt 是一个构建于 Vue 生态系统之上的全栈框架,它为编写 Vue SSR 应用提供了丝滑的开发体验。还可以把它当作一个静态站点生成器来用!简单来说, Nuxt 是 Vue服务端渲染的通用解决方案。

Nuxt2 版本是基于 Vue2.x 版本的,Nuxt3 版本是基于 Vue3.x 版本的,目前 Nuxt3处于RC版本。本文基于 Nuxt3,官网传送门。

前置准备

  • 开发工具:VS Code
  • VS Code插件:Vue Language Features(Volar)
  • VS Code插件:TypeScript Vue Plugin(Volar)
  • node版本需要高于v14.16.0

安装

创建项目:

pnpm dlx nuxi init learn-nuxt3 

进入项目目录:

cd learn-nuxt3 

安装依赖:

pnpm install --shamefully-hoist 

启动项目:

pnpm run dev 

入口组件

app.vue 是 Nuxt3 的入口组件,在 Nuxt3 中如果没有pages/目录,则表示不会包含vue-router依赖。不需要路由就可以这样做。

 

当应用需要使用路由时,就要在根目录下创建pages文件夹目录。此时,需要使用 路由出口组件:

 

在我们的项目根目录下创建 pages 目录,并修改 app.vue 文件。

路由

创建了pages文件夹目录后,Nuxt会自动集成vue-router,并根据pages目录下的文件名自动生成路由。这种形式称为 约定路由

pages 目录下创建 index.vue 为默认页,创建 about.vue:

 

此时访问 http://localhost:端口号/about,就会进入 关于我们 的页面,表明 Nuxt 已经为我们自动生成路由了。访问 http://localhost:端口号 就是默认的 index.vue 页面。

动态路由

把动态的参数放到[]中括号中,会生成动态路由。

创建user/[id].vue:

 

访问 http://localhost:端口号/user/xxx,会进入到 用户页。

直接访问 http://localhost:端口号/user,会出现404页面,此时可以 创建 user/index.vue 作为默认页。

也可以将[]应用到文件夹名称上或者混合使用,如:user-[role] user-[id].vue

路由参数

  • $route.params 获取路由参数,例如:/user/1,可以得到{ id: 1 }对象
  • $route.query 获取query参数,例如:/user/1?name=tom,可以得到{ name: 'tom' }对象
 

在 js 中使用路由参数,可以通过 Vue3 setup 中的useRoute方法:

 

路由跳转

Nuxt3 中路由跳转可以使用 组件进行跳转。

user/index.vue中:

 

用户默认页

用户1 |用户2 |用户3

嵌套路由

  • 目录和文件同名 (同级目录下)
  • 使用 组件作为子组件出口,类似于 vue-router 中的

在根目录下新建 parent 文件夹目录 和 parent.vue 文件,在 parent 下新建 child.vue,目录结构如下:

-| pages/
---| parent/
------| child.vue
---| parent.vue 

parent/child.vue

 

parent.vue

 

此时可以访问 http://localhost:端口号/parent/child,显示 child.vue 的内容。

当然也可以在 parent 目录下新建 index.vue,访问 http://localhost:端口号/parent时就会默认显示 pages/parent.vueparent/index.vue 嵌套的内容。如果没有这个 parent/index.vue,访问 /parent 时,就只会显示 pages/parent.vue 的内容。

页面head元素处理

设置页面标题:

  • </code> 标签</li></ul> <pre><code><Title>关于我们
    • useHead 方法,可以为页面设置标题、meta信息等
     useHead({title: '关于我们-'}) 
    

    使用自带的模板方法:

     useHead({title: '关于我们-',titleTemplate(title) {return title ? `xx网站 - ${title}` : 'xx网站'},}) 
    

    添加meta信息:

     useHead({// ...meta: [{ name: 'description', content: '网页的描述'},{ name: 'keywords', content: '关键字1'},]}) 
    

    给 body 添加 class样式:

     
    
     useHead({// ...bodyAttrs: {class: 'red'}}) 
    

    加载js文件:

     useHead({// ...script: [{src: 'assets/a.js',body: true}]}) 
    

    静态资源文件

    根目录下新建 publicassets 文件用于存放静态资源文件,将两个目录下都放上一张1.png的图片,在 about 页面中使用:

      
    

    可复用逻辑

    将可复用的逻辑存放在composables目录下,会被自动识别导入到应用程序,以便在全局范围内使用。

    新建 composables/useAge.ts:

    export const useAge = () => {return useState('age', () => 18)
    } 
    

    使用:

     
    

    最后

    为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



    有需要的小伙伴,可以点击下方卡片领取,无偿分享

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...