Nuxt学习_基础知识(二)

文章学习来源,nuxt中文网

1. 异步数据 AsyncData

1.1 获取并返回数据

AsyncData:在设置组件之前能异步获取或处理数据。async方法会在页面组件每次加载之前调用(没有this),可以在服务端或路由更新之前调用。在这个方法调用的时候,第一个参数被设定为当前页面的上下文对象,可以利用asyncData方法来获取数据,nuxt.js会将asyncData返回的数据融合组件data返回的数据一并返回给当前组件。

在详情页面使用asyncData调用并返回数据:
pages/detail/_id.vue

export default Vue.extend({
	  asyncData({params}) {
	    console.log(params, '当前params指代的是什么内容') // params指代路径参数,比如详情页面路径上的id
	    return axios.get('http://127.0.0.1:8090/api/fruits').then(({data}) => {
	      console.log(data.dataSource, '返回结果') // 接口返回值
	      return {
	        list: data.dataSource // return中返回的值和设置的属性,会合并到data中
	      }
	    })
  	},
})
  • 可以通过Promise、async/await、callback方式来处理返回值,以上述为例,通过Promise方式调用接口return一个属性,属性的值为对应接口的值,这个属性和值会同时被合并到data中,在页面加载完成后即可使用

1.2 处理异步请求

当发起网络请求时,我们通常可能需要对headers中增加信息进行校验,也可能需要对返回的response信息进行处理,可以通过进行封装Axios,增加拦截器来进行处理

  • 封装自己的带有拦截器的Axios request/index.js
import axios from "axios";
const myAxios = axios.create({
  baseURL: 'http://127.0.0.1:8090/api'
})

myAxios.interceptors.request.use(
  (req) => {
    req.headers.Authorization = 'XXX' // 在headers中增加信息进行校验等...
    return req
  }
)
myAxios.interceptors.response.use(
  (res) => {
    return {
      data: res.data
    }
  }, // 正确返回时处理response返回至
  (err) => {
    console.log(err)
    // return Promise.reject(err)
  } // 发生错误时,处理错误信息
)
export default myAxios

  • 在页面使用封装拦截后的Axios
import myAxios from "~/request";

  async asyncData() {
    try {
      let { data } = await myAxios.get('http://127.0.0.1:8090/api/fruits')
      return {
        list: data.dataSource 
### Nuxt.js 服务端渲染(SSR)教程和最佳实践 Nuxt.js 是基于 Vue.js 构建的一个框架,专注于简化服务端渲染(SSR)的应用程序开发过程。以下是关于 Nuxt.js 的 SSR 功能及其最佳实践的详细介绍。 #### 1. 安装与初始化 为了快速启动一个支持 SSR 的 Nuxt.js 项目,可以通过 `create-nuxt-app` 脚手架工具来完成项目的搭建[^4]。运行以下命令即可: ```bash npx create-nuxt-app my-nuxt-project cd my-nuxt-project npm run dev ``` 这会生成一个基础配置好的 Nuxt.js 项目结构,并自动启用默认的服务端渲染模式。 --- #### 2. 配置文件设置 在 Nuxt.js 中,默认启用了服务端渲染模式(Universal Mode),但也可以通过修改 `nuxt.config.js` 来调整渲染方式。例如,在生产环境中推荐保持默认的 SSR 设置: ```javascript export default { ssr: true, // 启用服务端渲染 target: 'server', // 使用 server 渲染目标 } ``` 此配置确保页面首次加载时由服务器生成 HTML 内容并发送给客户端,从而提高首屏加载速度和搜索引擎优化效果。 --- #### 3. 页面组件中的数据预取 Nuxt.js 支持两种主要的数据预取机制:`asyncData()` 和 `fetch()` 方法。这些方法允许开发者在页面渲染之前从 API 获取所需数据。 - **`asyncData()`**: 此函数会在导航到该页面之前被调用,适用于需要将返回的数据映射到组件状态的情况。 ```javascript export default { async asyncData({ $axios }) { const data = await $axios.$get('https://api.example.com/data'); return { items: data }; } } ``` - **`fetch()`**: 主要用于更新现有组件的状态而不影响响应式绑定。 ```javascript export default { data() { return { items: [] }; }, async fetch() { this.items = await this.$axios.$get('https://api.example.com/data'); } } ``` 这两种方法都可以在服务端执行,因此非常适合用来抓取初始数据以增强 SEO 表现[^2]。 --- #### 4. 动态路由处理 当涉及到动态路径参数时,可以在 `pages/` 目录下创建带有 `_id.vue` 或其他占位符名称的文件来匹配 URL 参数。例如,如果想实现 `/post/:id` 这样的动态路由,则需建立如下目录结构[^5]: ``` /pages/post/_id.vue ``` 在模板内部可通过 `$route.params.id` 访问传递过来的具体 ID 值。 --- #### 5. Layouts 与 Components 结合使用 Nuxt.js 提供了一种简单的方式来管理全局布局设计——即通过 `layouts/` 文件夹定义不同的页面样式组合。对于通用部分如头部菜单栏、底部版权信息等内容,可以集中放置于某个特定 layout 下;而对于独立区域则继续沿用标准 component 开发流程。 --- #### 6. 性能优化建议 除了上述核心知识点外,还需要注意一些额外的最佳实践来进一步改善用户体验: - **懒加载模块**:利用 Webpack 的按需加载特性减少初次进入网站所需的资源体积; - **图片压缩与 CDN 加速**:针对多媒体素材采取适当手段降低传输成本; - **缓存策略制定**:合理运用 HTTP 缓存头控制浏览器存储行为以便重复访问更快捷[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值