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 传递 的相关文章

  • 显示具有多个父代的 D3 树

    我目前有this http bl ocks org mbostock 4339083图已实现 我希望在描述具有多个父节点的子节点时保持结构和可折叠性 有没有办法做到这一点 我研究了力图 但我也想保留一组层次结构 这意味着 1 级的父级可以有
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 为什么 dplyr filter() 不能在函数内工作(即使用变量作为列名)?

    使用 dplyr 函数对数据进行过滤 分组和变异的函数 基本管道序列在函数之外工作得很好 这就是我使用真实列名称的地方 将其放入一个函数中 其中列名称是一个变量 并且某些函数可以工作 但有些函数则不能 尤其是 dplyr filter 例如
  • Angular.js:如何从无序列表中获取 orderBy 或过滤器来工作?

    尝试根据价格和评级 在返回的对象中 进行排序 我宁愿用 ng click 和 li 来代替使用选择菜单 有没有办法做到这一点 我环顾四周 这是我能想到的最接近的 ul class restaurant filter li i class i
  • 在渲染组件之前从 api 获取数据

    我在渲染页面之前发送 2 个 api 请求 const Profile template profile attributes null photos data function return attributes Profile attr
  • nodejs (libuv) 事件循环是否在一个阶段(队列)中执行所有回调,然后再进入下一阶段或以循环方式运行?

    我正在研究 Node js 中 libuv 提供的事件循环 我遇到了关注 Deepal Jayasekara 的博客 https blog insiderattack net event loop and the big picture n
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 在 r 中的 group_by 之后建模后取消列表列的嵌套

    我想对所有组进行线性回归group by 将模型系数保存在列表列中 然后使用 unnest 扩展列表列 这里我用的是mtcars以数据集为例 注 我想用do here becausebroom tidy 不适用于所有型号 mtcars gt
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • 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 是错误的做法 因为