Vuejs 变异对象作为 prop 传递

2024-01-05

如果我将一个对象作为 prop 传递(引用),可以改变 prop 中的值吗?

我正在开发一个网络应用程序,需要将大量值传递给组件,并且我正在尝试找到将值传递给组件并返回给父级的最佳方法。

从我读到的所有内容来看,改变 prop 是错误的做法,因为下次更新组件时,值会传递回子组件并覆盖突变。但仅传递对对象的引用,因此 object prop 中的值的任何突变都会发生在父组件中的原始对象上。此外,当发生这种情况时,Vuejs 不会抱怨 props 发生变化。

const subComponent = {
    name: "subComponent",
  template: `
    <div>
        Sub Component Input
        <input type="text" v-model="objectProp.val1"></input>
    </div>`,
  props: {
    objectProp: {
      required: false,
      default: () => {return {val1: "carrot"}}
    }
  }
}

const aComponent = {
    name: "aComponent",
  template: `
    <div>
        val1: {{mainObject.val1}}
        val2: {{mainObject.val2}}
        <sub-component :objectProp="mainObject"></sub-component>
    </div>`,
  data: function() {
      return{
        mainObject: {
        val1: "foo",
        val2: "bar"
      }
    }
  },
  components: {
    subComponent
  }
}

new Vue({
  el: "#app",
    components: {
    aComponent
  }
})

这是一个 JSFiddle,显示了正在发生变化的对象属性。

JSFiddle https://jsfiddle.net/StivnC/voe6pyag/16/


改变 prop 是一种不好的做法吗?

是的,一点没错。在更复杂的应用程序中,很容易忘记变异的位置/内容/原因

是什么right处理不同组件状态的方法?

在小型项目中,您确实可以做任何您想做的事情,因为您很可能能够遵循逻辑 - 即使在一年没有查看该项目之后。可能性包括:

  1. 变异道具(丑陋但有用)
  2. 使用事件来改变父组件中的状态;看看 EventBus(更好)
  3. 使用全局共享状态;看看 Vuex (最好,但有更多样板)

然而,在大型项目中,你绝对应该使用 Vuex。它是 Vue 的一个模块,可将全局共享状态添加到您的应用程序中,您可以从应用程序中的所有位置访问和更改该状态。

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

Vuejs 变异对象作为 prop 传递 的相关文章

随机推荐

  • Console.log 在 Chrome 中不起作用

    我试图从我的 javascript 代码中记录一些数据来检查它是否正确 但它似乎不起作用 即使我在控制台中输入 console log hello 控制台只返回未定义 这是正确的 但它也不会记录 hello 如果重要的话 我会使用 adbl
  • 使用 kubeadm 为什么要手动生成证书?

    我正在尝试遵循这个tutorial https blog inkubate io install and configure a multi master kubernetes cluster with kubeadm 自己生成证书而不是依
  • 如何删除分配有新放置的对象

    C 中的 new 运算符有很多面孔 但我对放置 new 感兴趣 假设您在特定的内存位置分配内存 int memoryPool poolSize sizeof int int p new mem int allocates memory in
  • 为什么通过字符串进行的往返转换对于 double 来说不安全?

    最近 我不得不将双精度数序列化为文本 然后将其取回 该值似乎不相等 double d1 0 84551240822557006 string s d1 ToString R double d2 double Parse s bool s1
  • 如何查看 Azure Devops 中的预定义变量

    我想查看预定义变量的路径值 例如 System DefaultWorkingDirectory 我想看到其中存储的价值 我无法找到此变量值 因此在 Azure DevOps 中哪里可以找到它 简而言之 我如何检查该特定发布管道中使用的 Bu
  • 易失性如何与常量一起工作?

    我有这段代码 像往常一样 变量 local 的值保持不变 因为它是const const int local 10 int ptr int local printf Initial value of local d n local ptr
  • 为什么 (A+B) 的 FFT 与 FFT(A) + FFT(B) 不同?

    我已经与一个非常奇怪的错误作斗争了近一个月了 向你们请教是我最后的希望 我用 C 编写了一个程序 集成了 2d卡恩 希利亚德方程 https en wikipedia org wiki Cahn E2 80 93Hilliard equat
  • 生成一个具有等宽列的表格(在 Xcode 的控制台上查看)

    这是我用来检查计算的一段代码 我只是将这些值写到 Xcode 的控制台中 每个数组均使用如下所示的值进行声明 var water deficit Int 该程序计算缺水值并将其附加到此列表中 计算未显示 let months January
  • maven编译器插件2.0.2

    您能否告诉我是否必须在我的 POM 中指定 maven compiler plugin 详细信息
  • 是否可以在运行时更改 ASP.NET Web.Config 值而不重新加载应用程序域?

    是否可以在运行时更改 Web Config 中的数据库连接字符串值 而无需重新加载应用程序域 这样做的原因是 我正在构建一个多租户应用程序 它使用一个代码实例和多个数据库实例方法 因此 web config 中的数据库连接字符串必须能够在运
  • JSHint 不允许我在“for”循环中使用“forEach”

    我有一个以数组作为值的对象 people steve foo bar joe baz boo 对于每个键 我想循环遍历相应数组中的值 足够简单 for var person in people person forEach function
  • 使用 Crystal Reports 公式将数字字符串转换为值,但将非数字保留为空白/空

    我有一个字符串字段 主要包含数字十进制值 但有时包含 我想使用公式将这些数值字符串转换为值 将非值留空 空 if isNumeric a omgang omg resultat then toNumber a omgang omg resu
  • C# - Windows CE:表单翻译独立于操作系统区域性设置

    我正在为 Windows CE 设备使用 C 编写一个程序 并且希望根据应用程序本身的语言设置来翻译该应用程序 我已经阅读了一些有关使用资源文件进行本地化以及使用 可本地化 和 语言 属性翻译表单的文章 根据我所读到的内容 我了解到这种类型
  • Python:“打破”外循环

    在下面的Python代码中 narg len sys argv print length arg narg if narg 1 print Usage input filename nelements nintervals break I
  • 更改 Rails 会话 cookie 域而不注销用户

    我正在使用 Rails 4 2 2 带有 Devise 3 4 1 并将 cookie store 域从 www boundless dev 更改为 boundless dev 以便在所有子域之间共享相同的会话 单点登录 Boundless
  • 我应该在 Heroku Cedar 上使用 Thin 还是 Unicorn

    我最近将我的应用程序 升级 到了 Heroku 上的 cedar 平台 默认情况下 我正在使用thin作为网络服务器 但我一直想用unicorn为了并发性并让我的动力美元去爸爸 但我担心使用 Thin 以外的东西会遇到一些问题 有人对这个决
  • UICollectionView 类似报纸的布局

    UICollectionView 是否可以灵活地动态呈现如下所示的界面 Newsify for iPhone 或者只能渲染预定义的静态布局 我想根据图像尺寸 高x宽 进行布局 比如小图像的小网格和大图像的大网格 所有这些都是在运行时根据我从
  • 导入 com.lowagie.database.DatabaseConnection 时出错

    我完成了第 1 章练习 现在转到第 2 章 我正在进行第一次 DatabaseTest 练习 但在导入语句中遇到错误 import com lowagie database DatabaseConnection and import com
  • 更新 Metal 中 MTLBuffer 的内容

    我需要帮助来替换 a 的内容MTL缓冲区无需创建新的 两种情况下的内容都是浮点数组 let vector Float 0 1 2 3 4 5 6 7 8 9 let byteLength arr1 count MemoryLayout
  • Vuejs 变异对象作为 prop 传递

    如果我将一个对象作为 prop 传递 引用 可以改变 prop 中的值吗 我正在开发一个网络应用程序 需要将大量值传递给组件 并且我正在尝试找到将值传递给组件并返回给父级的最佳方法 从我读到的所有内容来看 改变 prop 是错误的做法 因为