据我了解,vuex 的重点是保证状态的一致性,仅通过突变/操作/获取器将其暴露给组件。
然而,组件可以直接操作 $store.state 而不使用突变/动作——可能会使状态不一致。
为什么vuex状态直接暴露?
使用突变/动作/吸气等是建议的最佳实践,但并不意味着它有必须遵循。
可能是您只想从状态中读取一个值,此时为它编写一个 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)您可以在操作中执行相同的操作。
我认为这里的关键是保持一致,选择一种方法并使用它,但始终建议遵循最佳实践。