logo
火山博客
导航

Vue文件间变量共享机制

2024-11-15
19阅读时间2分钟

1. 基础类型变量共享

当从同一个JS文件中引入基础类型变量(number、string等)时:

Javascript
// shared.js
export let count = 1
export let name = "test"

// A.vue
import { count, name } from './shared.js'
count = 2  // 不会影响B.vue中的count
name = "new" // 不会影响B.vue中的name

// B.vue
import { count, name } from './shared.js'
console.log(count) // 仍然是1
console.log(name) // 仍然是"test"

2. 引用类型变量共享

对象、数组等引用类型变量共享同一个内存地址:

Javascript
// shared.js
export const obj = { value: 1 }
export const arr = [1, 2, 3]

// A.vue
import { obj, arr } from './shared.js'
obj.value = 2 // 会影响B.vue
arr.push(4)   // 会影响B.vue

// B.vue
import { obj, arr } from './shared.js'
console.log(obj.value) // 2
console.log(arr) // [1, 2, 3, 4]

3. Vue响应式数据共享

使用Vue的响应式API(ref/reactive)时:

Javascript
// shared.js
import { ref, reactive } from 'vue'
export const count = ref(1)
export const state = reactive({
  value: 1,
  name: 'test'
})

// A.vue
import { count, state } from './shared.js'
count.value = 2     // 会响应式影响B.vue
state.value = 2     // 会响应式影响B.vue

// B.vue
import { count, state } from './shared.js'
// 能够实时观察到A.vue中的修改

4. 最佳实践建议

1. 避免直接共享变量

  • 容易造成数据流向混乱
  • 难以追踪数据变化来源
  • 维护成本高

2. 推荐使用状态管理工具

  • Vuex (Vue 2/3)
  • Pinia (Vue 3推荐)
  • 提供了更清晰的数据管理方案
  • 便于追踪状态变化
  • 支持开发工具调试

3. 使用EventBus或Provide/Inject

  • 适用于简单的组件通信场景
  • 避免过度使用,以免造成维护困难
2024 © Powered by
hsBlog
|
后台管理