据我所知,vuex的目的是通过仅通过突变/动作/ getter将其暴露给组件来保证状态的一致性。
但是,组件可以直接操作$ store.state而不使用突变/操作 - 可能会使状态不一致。
为什么直接暴露vuex状态?
答案 0 :(得分:2)
使用mutation / actions / getters等是建议的最佳做法,但并不意味着有被遵循。
可能你只是想从状态中读取一个值,在该状态下为它编写一个getter可能会有点过度杀死。
我个人总是尝试使用动作/ getter来保持一致,因为当你开始在没有集中式系统的情况下改变状态时,它会变得混乱。
一个例子是,如果你在该州有一个user
模块。您可能很想仅仅需要用户名$store.state.user.username
,但我总是希望通过getUser
向用户展示,并通过user.username
在组件上访问该用户。
能够直接访问该州的专业人士是一只手表:
watch: {
'$store.state.user' (to, from) {
console.log('I changed!')
}
}
这可以让您知道用户状态何时发生变化,但如果您使用$this.$store.dispatch('setUser', myUser)
,则可以在操作中执行相同操作。
我认为这里的关键是一致的,选择一种方法并使用它,但始终建议遵循最佳实践。