【问题标题】:VueJs add non-reactive prop from parent to custom component?VueJs将非反应性道具从父级添加到自定义组件?
【发布时间】:2020-02-12 09:52:14
【问题描述】:

我正在尝试弄清楚如何经济地使用反应系统。我知道组件的 $options 用于非反应性数据,通常在 created() 或 mount() 方法中从其内部设置。但是有没有办法从父级传递 init 的非反应性道具?

举个简单的例子:

  • 假设我有一个将值呈现为货币的组件。
  • 99% 的时间货币是美元和
  • 100% 的时间货币在实例化后不会改变。
  • 但该值必须是响应式的。
    (这是一个简化的示例,只是为了演示这个概念)
props: {
    value: {
        type: Number,
        required: true,
    },
    currency: {
        type: String,
        default: 'USD',
    },
},

但我不想在货币上花费观察者,因为它永远不会改变。

我能以某种方式将它作为一个无人关注​​的 $option 传递吗?还有另一种方法吗?还是观察者如此便宜,我不应该担心大规模的效率?

感谢您的帮助!

【问题讨论】:

  • Vue 已经过高度优化,以使反应性快速且可扩展,所以我最初的反应是您进行了过早的优化。我建议您尝试一下,看看您是否有任何渲染问题。
  • 谢谢,这是很好的反馈并解决了我的问题。当应用程序扩展较大时,我试图避免修补泄漏,但考虑到框架,我可能过于谨慎。如果你愿意,我仍然很好奇理论上你会怎么做。

标签: vue.js vuejs2 vue-reactivity


【解决方案1】:

要获取非反应性字段,请使用常规 HTML 属性而不是声明的属性,并通过组件 $attrs 对象访问它。

我会选择Vue property。它是类型安全的、经过验证的,而且开销很小。

<my-element currency='12' />
const currency = parseFloat(this.$attrs.currency)

【讨论】:

  • 嘿 Steven - 这与我正在寻找的非常接近。可以货币=一个js变量吗?就像我希望它在初始化时是动态的,但不是观察者。所以我想把 currencyVariable 放到货币属性中。
  • 把它放在created 或mounted。使用this.currency 并将currency 添加到data。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2019-12-01
  • 2020-11-23
相关资源
最近更新 更多