vue.js - Vue.js 中全局可访问变量的性能影响是什么?
问题描述
在 Vue 中,全局可访问的变量似乎不是常态。到目前为止,我已经找到了 3 种在组件之间共享数据的方法。就我而言,这些变量需要既可读取又可写入。
- 使用可变类型的Vue 实例属性。
Vue.prototype.$potato = { a: null }
this.$potato.a = "potato!";
- 创建一个新的 Vue 实例作为全局 mixin 来存储所有数据。
let globalData = new Vue({
data: { $potato: null }
});
Vue.mixin({
computed: {
$potato: {
get: function () { return globalData.$data.$potato },
set: function (newPotato) { globalData.$data.$potato = newPotato; }
}
}
});
this.$potato = "potato!";
- 使用自定义 EventBus,通过发出和监听自定义事件。
import Vue from 'vue'
export default new Vue()
import EventBus from './EventBus'
EventBus.$emit('_data', payload)
EventBus.$on('_data', () => {})
一种。实现这一目标的最合适和最优雅的方法是什么?
湾。以上对性能有何影响(即,哪个最有效)?
我个人最喜欢使用第一种方法,因为它非常简单。但是,实例属性是不可变的。 这让我怀疑是否不应该为实例属性使用可变类型(例如对象或数组)。
解决方案
Mixins 或 globals - 根据我的经验,没有明显的性能差异。
关于优雅——mixin 不是很优雅,也不是全局的。此外,默认情况下全局变量不是反应式的。
如果您想避免使用 Vuex - 我建议您将所有全局数据移动到一个单独的单例中,如下所示:
my_global.js
export default {
doStuff: function (a,b) { /* do something */ }
state: {
a: 1,
b: 2
}
}
并像这样使用它:
my-component.vue
<template>
<div>{{ state }}</div>
</template>
<script>
import GLOB from 'my-global.js'
export default {
name: 'my-component',
data () {
return { state: GLOB.state }
}
}
</script>
您还可以移动一些全局方法来操作您的全局数据,或者只是将其更改到位。一旦你在组件中使用了任何对象data()
——它就会对它使用的所有组件产生反应。
推荐阅读
- php - 如何将从数据库中随机选择的图像放置在页面上的随机位置?
- python - python中用于检测Python中缺失值的用户定义函数?
- java - Android 应用程序客户端与 java 服务器的相互 TLS
- c++ - 如何将字符串推送到 shared_ptr 的向量中?
- visual-studio - 调用 Web 服务的最简单的 Visual Studio 项目
- rest - Flutter 与 REST 后端 Springboot
- java - 我们可以在同一个项目中同时使用 aws dynamodb 版本 1.x 和 2.x 吗?
- mongodb - mongodb count(*) 没有使用复合索引
- python - 在 Python 中将宽字符转换为系统 ANSI 编码
- xamarin - Xamarin Forms - 颜色如何在 iOS 的导航栏上工作