【问题标题】:Why is vue store state defined differently? (Nuxt, vue)为什么 vue store 状态定义不同? (Nuxt, Vue)
【发布时间】:2020-05-09 05:48:25
【问题描述】:
// nuxt vuex module
export const state = () => ({
  test : '',
});

// state should be a method that returns an object in store/index.js 
export const state = {
  test : '',
};


// pure vue or classic mode
const store = new Vuex.Store({
  state: {
    count: 0
  },
})

为什么我们在模块模式下使用vuex时需要将状态返回给nuxt中的函数?

我不知道为什么。

在mutation和action的情况下,如果你马上分配一个对象,也分配状态是正常的吗?

【问题讨论】:

    标签: javascript vue.js vuex nuxt.js


    【解决方案1】:

    好问题,我也不确定。我唯一能找到的是this comment。显然是为了解决并发问题,这是 Vue 在浏览器中不会遇到的问题。

    例如,关于返回存储文件中状态的函数,实际上是 Evan 将其实现到 Nuxt.js 中以避免两个并发请求之间的状态相同

    编辑

    更多地遵循兔子洞,更广泛的情况是它需要遵守这个服务器渲染规则:"Avoid Stateful Singletons"

    事物的节点方面需要一种方法来获取初始状态的新副本,这只能通过函数实现,因为状态对象可能已被其他请求改变。

    【讨论】:

    • 节点端是单线程的,你的意思是你需要一个函数返回的状态对象吗?当您阅读 vue ssr 指南时,为什么要返回一个函数来为每个请求创建一个单例状态?在CSR模式的情况下,理解为基于单线程创建执行上下文,所以不需要返回函数。
    • @zero86 在这种情况下并发与线程数无关。这是关于为新请求获得状态的新表示。如果你把它表达为一个对象字面量,你就会打开由其他请求改变该对象引起的错误的大门
    • 理解不可变对象的概念会有所帮助吗?感谢您的回答@Matt
    • @zero86 在这种情况下不是,因为服务器代码实际上可能想要改变单个请求的状态(例如,在nuxtServerInit 中膨胀用户会话)。这种突变可能与同一节点上的另一个请求无关(例如不同的用户 ID),这就是为什么 nuxt 需要一个函数来返回初始状态的新副本
    • 你明白吗,对于每个请求,要确保单例接收到一个有保证的状态对象,然后对每个请求进行处理? @马特
    猜你喜欢
    • 2020-02-25
    • 2020-09-24
    • 1970-01-01
    • 2018-08-17
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2019-03-13
    相关资源
    最近更新 更多