Nuxt 和 vue 中的 Data() VS asyncData()

2023-12-22

Both data() and async data()给出相同的结果(很明显,结果来自asyncData()覆盖结果data())

两者都会在源代码中生成 HTML 代码(即在服务器端呈现的代码)

此外,两者都可以用于“await" 要获取的数据(例如:使用 axios)

那么,它们之间有什么区别呢?

<template>
    <div>
        <div>test: {{ test }}</div>
        <div>test2: {{ test2 }}</div>
        <div>test2: {{ test3 }}</div>
        <div>test2: {{ test4 }}</div>
    </div>
</template>

<script>
export default {
    asyncData(app) {
        return {
            test: "asyncData",
            test2: "asyncData2",
            test3: "asyncData3"
        };
    },
    data() {
        return {
            test: "data",
            test2: "data2",
            test4: "data4"
        };
    },
};
</script>

result:

test:  asyncData
test2: asyncData2
test2: asyncData3
test2: data4

最简单的答案是 data() 在客户端处理,但是 asyncData() 部分在调用 Nuxt() 时在服务器端处理一次,并在客户端再次处理。

nuxt 的最大优势是它能够在服务器端渲染内容。如果您在客户端使用 Promise 加载内容,例如在已安装部分中,例如:

data() {
  return {
    products: []
  }
},

mounted() {
  axios.get('/api/v1/products').then(response => {
    this.products = response.data
  })
}

JavaScript 代码按原样发送到客户端,浏览器负责运行 Promise 以从 api 获取数据。但是,如果您将承诺放入 asyncData 中:

asyncData() {
  return axios.get('/api/v1/products').then(response => {
    // Note that you can't access the `this` instance inside asyncData
    // this.products = response.data
    let products = response.data
    return { products } // equivalent to { products: products }
  })
}

数据获取在服务器端完成,结果被预渲染,并且带有数据(渲染到其中)的 html 被发送到客户端。因此,在这种情况下,客户端不会收到 javascript 代码来自行处理 api 调用,而是收到如下内容:

<ul>
  <li>
    <a href="#">Product 1</a>
  </li>
  <li>
    <a href="#">Product 2</a>
  </li>
  <li>
    <a href="#">Product 3</a>
  </li>
</ul>

我们从 asyncData 返回的结果与 data 中的内容合并。它不是被替换而是合并。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nuxt 和 vue 中的 Data() VS asyncData() 的相关文章

  • 更新的生命周期事件:仅在特定元素上的 dom 更新后使用观察者进行操作

    在 Vue 中有 updated 生命周期方法 适合在数据输入后对我的标记进行操作 在我的例子中 我手动推动 SVG 文本 使其与由于输入新文本而导致其尺寸发生变化后的某些内容对齐 嗯 看来我想用 watch 块 因为它允许我只在speci
  • Nuxt 致命错误 TypeError:无法解构“this”的属性“nuxt”,因为它未定义

    当我尝试构建 docker 映像时 运行后出现此错误yarn build 0 0 496 yarn run v1 22 19 0 0 531 nuxt build 0 1 538 Using Tailwind CSS from assets
  • Vue.js 拦截器

    我怎样才能使用interceptor in vue js 因此 在每个请求 响应之前 它应该首先进入拦截器 我已经搜索了很多 但找不到关于此的好的文档 我想像这样使用 JWTAuth function define use strict d
  • 将数据传递给 vue.js 中的组件

    我正在努力理解如何在 vue js 中的组件之间传递数据 我已经通读了几遍文档并查看了许多 vue 相关问题和教程 但我仍然不明白 为了解决这个问题 我希望能帮助完成一个非常简单的例子 在一个组件中显示用户列表 完成 单击链接 完成 时将用
  • NativeScript + Vue.js + FontAwesome

    我正在尝试使用 FontAwesome 图标集通过 NativeScript 和 Vue js 构建应用程序 但我无法找出问题 因为我什至没有错误提示消息 我忠实地关注文档 但没有任何反应 我到处寻找 但什么也没有 如果你能帮我解决这个问题
  • 嵌套组件无法正确重新渲染:VueJs

    我是 Vue 新手 我正在构建这个论坛之类的东西 可以在其中添加嵌套评论 这里有两个组件 发表论坛和评论 PostForum 包含一个输入框和父评论 在每个评论中 我递归地添加了子评论 当我添加评论时 效果很好 但是删除时 它发送ajax请
  • VueJS:以冒号为前缀的 html 属性表示什么?

    Example
  • (Vue) Ant Design 使用 v-decorator 以 ant 形式显示客户端和服务器端验证

    我用过蚂蚁设计的表单组件v decorators用于验证表单 我想显示客户端 我当前已完成的 v decorator 规则验证 以及服务器端表单数据验证 将此视为示例登录表单
  • Vue CLI 3 不会将供应商转换为 ES5

    我们有一个 vue cli 3 项目 它工作得很好并且编译没有问题 事实上 我们必须支持仅支持 ES5 代码的旧浏览器 在项目中我们集成了一些用ES6编写的外部库 reconnecting websocket是一个例子 Problem 使用
  • Nuxt js全静态动态页面,payload未定义

    我正在尝试动态生成页面 运行 nuxt generated 后 页面已成功创建 但是加载页面 使用 nuxt start 它说标题未定义 我在生成时在有效负载中发送 每个生成的页面都存在有效负载 js 但由于某种原因它无法工作 Page r
  • 关闭表单多选按钮单击 vuejs

    我有 vue 材质多选的 html 设计 我希望单击按钮即可关闭多选选项 Here is my design 我试过这个 methods selectAgents this refs selectAgent el children 0 cl
  • VueJS vue-spinner 属性或方法“加载”未定义

    你好 我正在尝试设置view spinner https www npmjs com package vue spinner 但是出现错误 vue esm js 591 Vue warn 属性或方法 loading 未在实例上定义 但在渲染
  • webpack-cli 错误:编译规则集失败

    我正在尝试重写配置不当的package json 删除node modules 删除 cache 从头开始 包 json name billing version 0 1 0 private true description A Vue j
  • 如何改进 axios.spread

    我使用以下代码进行多个 HTTP 调用 具体取决于studentList 效果很好 不过 我认为 axios 传播没有必要 export default getFee studentList studentId string if stud
  • 如何检查我的 create-nuxt-app 版本并升级?

    背景 以前 运行yarn create nuxt app myApp 会安装Nuxt v2 4 0 但今天我注意到您降级到Nuxt v2 0 0 我没有改变开发环境 所以我无法理解这种行为 当我发现这个问题时 我做了一些搜索并在其他地方抱怨
  • 安装@vue/cli后找不到命令

    我安装了 npm vue cli https cli vuejs org with npm install g vue cli 但是当我尝试 vue 命令时我得到了 bash vue command not found 我添加了export
  • 设置 Vuetify 复选框的初始值

    我有一个使用 Vuetify 复选框的 Vue JS 应用程序 我无法将初始值设置为选中
  • vue基于媒体查询绑定值

    carousel 3d display 3 width 150 height 150 我想根据媒体查询设置属性绑定 e g 当屏幕宽度 gt 960px 时 显示应变为 5 您可以尝试绑定display组件属性的值
  • 使用 mouseover 和 mouseout 为 Vue 组件设置动画

    我正在尝试创建一个 Vue 组件 当鼠标光标悬停在其上时该组件会弹起 我正在使用 animate css 库并使用 mouseover 更改组件类 然后在 mouseout 上重置它 差不多就可以了 当用户将光标停在边界附近时 就会出现唯一
  • 多个模板槽的相同槽内容

    在vuejs中 有没有一种方法可以为多个插槽设置相同的内容 而无需复制粘贴 So this

随机推荐

  • 如何合并两个FBO?

    好的 我有 4 个缓冲区 3 个 FBO 和一个渲染缓冲区 让我解释 我有一个视图 FBO 它将在将场景渲染到渲染缓冲区之前存储场景 我有一个背景缓冲区 其中包含场景的背景 我有一个用户缓冲区 供用户操作 当用户执行某些操作时 我会使用一些
  • PhoneGap build + jquerymobile:onclick 按钮不起作用

    我使用 jquery mobile 开发了一个移动应用程序 在特定页面上 我尝试通过按钮上的 onclick 调用 JavaScript 函数 在线托管时 在 iPhone 上的 Safari 浏览器中一切都完美运行 http laughl
  • SOLR - 查询 Facet,每个 Facet 返回 N 个结果

    我有大量文档存储在 SOLR 索引中 我想执行一个查询 返回指定字段的 Facet 计数以及前 100 个文档每个方面字段回 例如 假设我的 SOLR 索引中存储了一堆书 name Book 1 genre Mystery name Boo
  • 两个循环,但是 Theta(n)?

    i n while i gt 1 for j 1 to i Function lt O 1 i i 2 答案是 Theta n 但我不明白为什么这是 Theta n 根据我的理解 内部循环将执行 n n 2 n 4 1 因此总数将为 O n
  • 如何检查变量是整数还是字符串? [复制]

    这个问题在这里已经有答案了 我有一个包含几个命令的应用程序 当您键入某个命令时 您必须键入有关某物 某人的附加信息 现在 该信息必须严格是整数或字符串 具体取决于情况 然而 无论你使用 raw input 在 Python 中输入什么 实际
  • java.net.MalformedURLException:无协议

    我收到如下 Java 异常 java net MalformedURLException no protocol 我的程序尝试使用以下方法解析 XML 字符串 Document dom DocumentBuilderFactory dbf
  • 比较 C# 中的枚举标志

    我需要检测枚举值中是否设置了标志 该类型用 Flag 属性标记 通常它是这样制作的 value flag flag 但由于我需要通过通用来做到这一点 有时在运行时我的事件只有一个 Enum 引用 我找不到使用 运算符的简单方法 目前我是这样
  • Java说非空文件是空的?

    我有一个特定文件 http dl dropbox com u 123623 test fJava说的是空的 源代码 import java io File import java io FileNotFoundException impor
  • 从 Twitter 状态获取意图的工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑一个项目 其中出版物的内容通过来自该地区的人们的相关 公开的推文来增强 但我怎样才能以编程方
  • 将所有设置从 Eclipse 导入到 Android Studio

    Google 宣布不再积极开发 Eclipse 的 ADT 插件 如果您是新的 Android 开发人员 您应该考虑从 Android Studio 开始 因为 Eclipse 的 ADT 插件不再处于积极开发状态 http develop
  • onblur 和 link 元素在 Chrome 中无法正常工作 - 在 IE 10 中正常

    我正在努力实现以下目标 单击链接 显示菜单 一旦该菜单失去焦点 清除菜单 同样当单击菜单项时 删除菜单 这是我的简化代码 a href ClickOnMe a function doThis console log clickedOnIte
  • 凸包的测试用例数据

    我需要为类作业创建一个 2D 凸包函数 并且我想要一个比作业提供的更强大的测试用例 有谁知道解决方案的大型测试用例 25 这里还有一些测试数据 这是一些测试数据 Test 1 8 7 7 7 7 7 7 7 7 9 0 9 0 0 9 0
  • Pandas - 滚动坡度计算

    如何计算每列滚动 窗口 60 值的斜率 步长为5 我想计算每5分钟的值 并且我不需要每条记录的结果 这是示例数据框和结果 df Time A N 2016 01 01 00 00 1 2 4 2 2016 01 01 00 01 1 2 4
  • 如何设置ADB进行远程机器开发和本地设备部署

    我的场景是这样的 我在家远程办公并通过以下方式登录我的工作机器Windows 远程桌面 https Windows 20Remote 20Desktop 我用Eclipse https en wikipedia org wiki Eclip
  • css - 如何将
  • 放置在水平
  • I have section 其中包含水平ul 其中包含四个li的 如下 header strip ul display flex justify content space between margin 0 padding 0 heigh
  • R - 根据同一列中先前的值进行变异

    Data df lt data frame year c 2018 2019 2020 2021 growth c 0 05 0 1 0 08 0 06 size c 100 NA NA NA year growth size 1 2018
  • 不使用 Javascript 切换 div

    我想切换一个 div 但我的要求是它必须与javascript关掉 我想选择一个声明 修改搜索 的超链接 并显示包含搜索条件的 div 我发现了大量使用的演示jQuery 但它们都需要javascript已启用 如有任何帮助 我们将不胜感激
  • 何时在 PHP 中使用接口

    在 PHP 中使用对象进行编码时 我一直很难理解接口的真正价值 我想象可能是其他语言 据我了解 你使用Interface强制或保证当一个类使用Interface该类将具有定义在Interface在那个班级里面 因此 根据我对使用它们的了解
  • 使用 Api Gateway 和 Lambda 导出 CSV

    我想做的事 我想做的是有一个 url 它将返回给调用者一个 CSV 文件 该文件本质上是数据的导出 我希望这仍然是一个无服务器解决方案 我做了什么 我已经使用我想要的 URL 创建了一个 AWS API Gateway 我创建了一个 lam
  • Nuxt 和 vue 中的 Data() VS asyncData()

    Both data and async data 给出相同的结果 很明显 结果来自asyncData 覆盖结果data 两者都会在源代码中生成 HTML 代码 即在服务器端呈现的代码 此外 两者都可以用于 await 要获取的数据 例如 使