IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> nuxt 中的asyncData和fetch方法及区别 -> 正文阅读

[JavaScript知识库]nuxt 中的asyncData和fetch方法及区别

1. asyncData()和fetch()的相同点

  • 参数是一个object,为context(上下文) :被设定为当前页面的上下文对象
  • 参考官方上下文
//asyncData()(context) {
fetch()(context) {
  // Universal keys
  const {
    app,     //包含所有插件的 Vue 根实例。例如:在使用 axios 的时候,你想获取 $axios 可以直接通过 context.app.$axios 来获取
    store,   // Vuex.Store 实例。只有vuex 数据流存在相关配置时可用
    route,   // Vue Router 路由实例
    params,  // route.params 的别名
    query,   // route.query 的别名
    from,    // 路由的导航路线
    env,     // nuxt.config.js 中配置的环境变量
    isDev,   //是否是开发 dev 模式,在生产环境的数据缓存中用到
    isHMR,   //是否是通过模块热替换 webpack hot module replacement (仅在客户端以 dev 模式)
    req,     // Node.js API 的 Request 对象。如果 Nuxt 以中间件形式使用的话,这个对象就根据你所使用的框架而定。nuxt generate 不可用
    res,     // 与req同理
    redirect,// 用这个方法重定向用户请求到另一个路由。状态码在服务端被使用,默认 302 redirect([status,] path [, query])
    error,   // 用这个方法展示错误页:error(params) 。params 参数应该包含 statusCode 和 message 字段
    $config  // 访问运行配置
  } = context
  // Server-side
  if (process.server) {
    const { req, res, beforeNuxtRender } = context
  }
  // Client-side
  if (process.client) {
    const { from, nuxtState } = context
  }
}
  • 官方图给了详细的用法:上下文用法详情上下文
  • 注意:由于asyncData和fetch方法是在组件 初始化 前被调用的,所以在方法内是没有办法通过 this 来引用组件的实例对象

2. asyncData()和fetch()的不同点

2.1 asyncData()

  • 应用场景:在服务器端获取并渲染数据(异步请求数据,返回给当前组件的data),asyncData方法使得你能够在渲染组件之前异步获取数据
  • 什么时候被调用:
    • asyncData方法会在组件(限于页面组件)每次加载之前被调用。
    • 它可以在服务端或路由更新之前被调用
  • 利用 asyncData方法来获取数据并返回给当前组件
<template>
  <div>
    <h1>{{ post.title }}</h1>
    <p>{{ post.description }}</p>
  </div>
</template>

<script>
  export default {
    async asyncData({ params }) {
      const post = await await axios.get(`https://api.nuxtjs.dev/posts/${params.id}`)
      return { post }
    }
  }
</script>

2.2 fetch()

  • 应用场景: 在渲染页面前填充应用的状态树(store)数据(不会设置组件的数据)
  • 什么时候被调用:
    • 组件每次加载前被调用(在服务端或切换至目标路由之前)
  • 可以用 fetch 方法来获取数据填充应用的状态树(vuex)。为了让获取过程可以异步,你需要返回一个 Promise,Nuxt.js 会等这个 promise 完成后再渲染组件,如:
<template>
  <h1>Stars: {{ $store.state.stars }}</h1>
</template>

<script>
export default {
  async fetch ({ store, params }) {
    let { data } = await axios.get('http://my-api/stars')
    store.commit('setStars', data)
  }
}
</script>
  • 失效:查询字符串(query)更改, fetch()不会调用。
    • 失效解决方案:设置通过页面组件的watchQuery属性来监听参数的变化
2.3 异步数据:
  • asyncData是通用数据获取的另一个钩子。不像fetch,它需要您在组件实例上设置属性(或调度 Vuex 操作)以保存您的异步状态,asyncData只需将其返回值合并到组件的本地状态中
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:12:46  更:2022-03-16 22:17:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:23:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码