Vuejs2 如何通过vuejs中的全局混合在组件之间共享数据?为什么它不是反应性的?

Vuejs2 如何通过vuejs中的全局混合在组件之间共享数据?为什么它不是反应性的?,vuejs2,vue-component,vue-mixin,Vuejs2,Vue Component,Vue Mixin,我想在所有组件之间共享简单数据 我知道可以使用Vuex或全局变量作为状态来完成,但这对我的项目来说太过分了 代码如下: Vue.mixin({ data: function () { return { base_url: 'http://test.develop/api/v1/', isLoading : false } } }) base\u url是常量,其工作但isLoading必须是被动的,

我想在所有组件之间共享简单数据 我知道可以使用
Vuex
或全局变量作为状态来完成,但这对我的项目来说太过分了

代码如下:

Vue.mixin({
    data: function () {
        return {
            base_url: 'http://test.develop/api/v1/',
            isLoading : false
        }
    }
})
base\u url
是常量,其工作但
isLoading
必须是被动的,并且它不工作,当我在一个组件中更改它并在另一个组件中记录它时,它保持不变


现在我的问题是在vue混合中应该使用什么样的数据?mixin是否仅用于共享代码或数据?mixin也可以共享这些代码或数据?

Vuex可能不会过分。Vuex适用于小型和大型项目。Vue混合并不意味着保持全局状态。mixin是extends的OOP等价物。您基本上通过合并继承了它上面的所有内容,组件具有优先权。这只是为了共享行为(方法、数据、生命周期)

免责声明:我不认为社区会接受这一点,只是把它当作一种学习练习

但在mixin中保持某种“全局状态”的唯一方法是将其初始化对象包装在闭包中,并跟踪反应对象中的信息,如下所示:

Vue.mixin((()=>{
  let store = Vue.observable({
    isLoading: true
  })

  return {
    computed: {
      isLoading: {
        get(){
          return store.isLoading
        },
        set(val){
          store.isLoading = val
        }
      }
    },
  }
})())
这是一把小提琴:


再说一次,我不赞成这种方法,混血是个坏主意;使用VUEX。我们认为这个方法是可行的,也是我们项目中的一个很好的折衷方案。我们的状态相当简单,但会有很多(很多)突变和行为。我想这可能是个好主意。只需要强调一下,混搭是个糟糕的主意;对回答这个问题投赞成票,不过哈哈,关于常数数据呢?在所有组件之间共享常量数据(如
base\u url
)的最佳方式是什么?通常,您会使用“环境变量”来处理url之类的内容,因为如果它处于开发模式,您将处于本地主机,但如果部署,您将拥有实际的url,并且不希望手动更改它