为什么状态对组件可见?

nag*_*hun 2 vue.js vuex

据我了解,vuex 的重点是保证状态的一致性,仅通过突变/操作/获取器将其暴露给组件。

然而,组件可以直接操作 $store.state 而不使用突变/动作——可能会使状态不一致。

为什么vuex状态直接暴露?

web*_*oob 5

使用突变/动作/吸气等是建议的最佳实践,但并不意味着它必须遵循。

可能是您只想从状态中读取一个值,此时为它编写一个 getter 可能有点过头了。

我个人总是尝试使用操作/获取器来保持一致,因为当您在没有集中式系统的情况下开始改变状态时,它会变得混乱。

例如,如果您user在该州有一个模块。您可能想只需要用户名,$store.state.user.username但我总是更喜欢通过 公开用户getUser并通过user.username.

能够直接访问状态的专业人士是手表:

watch: {
  '$store.state.user' (to, from) {
    console.log('I changed!')
  }
}
Run Code Online (Sandbox Code Playgroud)

这将允许您知道用户状态何时发生变化,但同样,如果您使用过,$this.$store.dispatch('setUser', myUser)您可以在操作中执行相同的操作。

我认为这里的关键是保持一致,选择一种方法并使用它,但始终建议遵循最佳实践。