我见过很多人建议通过道具将状态传递给组件,而不是直接在组件内部访问vue状态,以使其更可重用。
但是,如果我始终如一地执行此操作,则意味着只有路由根组件才可以与商店通信,并且所有数据都需要通过嵌套层次结构传递才能获得最终组件。这似乎很容易造成混乱:
Dashboard
Profile
Billing
History
CreditCards
CreditCard
如何加载用户信用卡的数据?在资讯主页中将其一直传递到树下吗?
我见过很多人建议通过道具将状态传递给组件,而不是直接在组件内部访问vue状态,以使其更可重用。
但是,如果我始终如一地执行此操作,则意味着只有路由根组件才可以与商店通信,并且所有数据都需要通过嵌套层次结构传递才能获得最终组件。这似乎很容易造成混乱:
Dashboard
Profile
Billing
History
CreditCards
CreditCard
如何加载用户信用卡的数据?在资讯主页中将其一直传递到树下吗?
这会造成混乱,您是正确的。这是vuex解决的问题之一。
那么,您如何决定是通过道具还是使用vuex?当我说使用vuex时,我的意思是直接从需要它的组件中访问商店数据。诀窍是要考虑每个数据与整个应用程序的关系。
在整个页面,多个DOM层次结构,不同页面等中重复使用的数据是使用vuex的理想情况。
另一方面,某些组件是如此紧密地耦合,以至于传递道具是显而易见的解决方案。例如,您有一个list-container
组件,其直接子级是该list
组件,并且两个组件都需要相同的列表数据。在这种情况下,我会将列表数据list
作为道具传递给组件。
您可能对实例属性感兴趣 $attrs
https://vuejs.org/v2/api/#vm-attrs
以及它的兄弟选项inheritAttrs
。
https://vuejs.org/v2/api/#inheritAttrs
结合使用这两个选项,您可以使用更少的样板代码将道具向下传递到多个组件级别。
每个组件,无论其层次结构位置如何,都可以与商店进行通信。
在每个组件内部,您都可以访问该对象,
this.$store
因此可以actions
通过调度,提交数据mutations
或通过读取数据getters
阅读文档以获取更多详细信息: