回答范例:
vuex是vue专用的状态管理库。
它以全局方式集中管理应用的状态,并且可以保证状态变更的可预测性。
vuex主要解决的问题是多组件之间状态共享的问题,利用各种组件通信方式,我们虽然能够做到状态共享。
但是往往需要在多个组件之间保持状态的一致性,这种模式很容易出现问题,也会使程序逻辑变得复杂。
vuex通过把组件的共享状态抽取出来,以全局单例模式管理。
这样任何组件都能用一致的方式获取和修改状态。
响应式的数据也能够保证简洁的单向数据流动,我们的代码将变得更结构化且易维护。
vuex并非必须的,它帮我们管理共享状态,但却带来更多的概念和框架。
如果我们不打算开发大型单页应用或者我们的应用并没有大量全局的状态需要维护,完全没有使用vuex的必要。
一个简单的store 模式就足够了。反之,Vuex 将会成为自然而然的选择。
引用 Redux 的作者 Dan Abramov 的话说就是:
Flux 架构就像眼镜:您自会知道什么时候需要它。
我在使用vuex过程中有如下理解:
首先是对核心概念的理解和运用,将全局状态放入state对象中,它本身一棵状态树,组件中使用store实例的state访问这些状态;
然后有配套的mutation方法修改这些状态,并且只能用mutation修改状态,在组件中调用commit方法提交mutation;
如果应用中有异步操作或者复杂逻辑组合,我们需要编写action,执行结束如果有状态修改仍然需要提交mutation,组件中调用这些action使用dispatch方法派发。
最后是模块化,通过modules选项组织拆分出去的各个子模块,在访问状态时注意添加子模块的名称;
如果子模块有设置namespace,那么在提交mutation和派发action时还需要额外的命名空间前缀。
vuex在实现单项数据流时需要做到数据的响应式。
通过源码的学习发现是借用了vue的数据响应化特性实现的。
它会利用Vue将state作为data对其进行响应化处理,从而使得这些状态发生变化时,能够导致组件重新渲染。