vue.js - Vue 组件 - 如何处理非反应性数据?
问题描述
我正在跟踪 Vue 2 组件中的反应性开销最佳实践。我需要使用 genId() 生成一次性字符串并将其分配给组件的 id 属性。在那之后进行任何观看似乎有点过头了。
:id="myID"
将其插入 html id 的正确方法是什么?
然后在设置源时,我将非反应性数据放在哪里?我有3个想法:
将属性添加
myID: genId()
到data
. 但是,即使它不会改变,它不会自动添加到监视列表中吗?造成开销?我在Vue 论坛上阅读了一年前的答案,该答案
myID: genId()
应该很created
重要。对这种事情使用钩子是最佳实践吗?我认为钩子是不鼓励的。或者我可以把它放在组件中
methods
,然后直接调用它:id="genId()
有没有一种Vue方法可以做到这一点?
解决方案
对非反应性数据使用方法 2 (并且您在页面上多次使用该组件,添加更改侦听器的小开销会产生任何影响。)
created() {
this.myId = genId()
}
这 3 种方法的行为不同:
方法一:data
这将在创建数据对象时调用 genId() 并添加更改侦听器。
方法二:created hook
这将在组件对象创建时调用 genId() 并且不添加更改监听器。
方法 3:方法
每次模板重新渲染时都会调用 genId()。每次在视图正在侦听或$forceUpdate()
调用的变量上检测到更改时都会发生这种情况。
附言。Vue 对象已经有一个唯一的 id:this._uid
但这是一个私有属性,可能会在 Vue 的未来版本中发生变化。
推荐阅读
- vba - 模板中的 PowerPoint 宏
- r - 闪亮:我正在尝试在闪亮的应用程序中绘制散点图,但它只出现一个点
- python - Python。如何将 python 数组输出保存到 Sqlite 数据库中
- amazon-web-services - S3 对象在一天中的什么时间转换到 S3-IA 或 Glacier
- vuejs2 - bootstrap-vue 数据表显示行详细信息问题
- fosuserbundle - FOSUserBundle 和 EasyAdmin - 添加新组时参数太少
- .net - WmiMonitorID - 将结果转换为 ASCII
- javascript - Cannot target a class with jQuery
- php - Magento中的反sql注入
- javascript - 如何在编译为 WebAssembly 的 Rust 库中使用 C 库?