Vuex 是 Vue.js 应用程序开发的状态管理模式。它充分利用了 Vue.js 的模块化机制,将应用程序中的所有组件状态集中处理,简化了应用程序的复杂度。Vuex 最重要的特性之一就是它提供了一个全局的状态管理器,开发者可以在应用程序的任何地方获取和管理应用程序的状态。
Getter
在Vuex中,Getter是一个函数,用于从存储器中获取状态。Getter可以避免组件之间直接访问状态,并提供了一种向其他组件公开状态的方法。Getter是只读属性,也就是说它不能被修改-只能被读取。
Getter的主要作用是用来将存储器中的原始状态进行过滤、计算、映射,得到我们需要的状态值。 可以将 Getter 封装成一个属性, 然后在其他组件中直接通过调用该属性来获取值, 而无需手写复杂的过滤、计算、转换逻辑。
以下是一个如何在Vuex中定义和使用Getter的示例代码:
-- -------------------- ---- ------- ------ --- ---- ------ ------ ---- ---- ------- -------------- ----- ----- - --- ------------ ------ - ------ -- ------ - - --- -- ----- -------- ------ --- --------- - -- - --- -- ----- --------- ------ --- --------- - -- - --- -- ----- --------- ------ --- --------- - - - -- -------- - --------- ----- -- - ------ ------------ -- --------- ----- -- - ------ ------------ -- --------- ----- -- - ------ -------------------------- ----- -- - ------ ----- - ---------- - -------------- -- --- -- ------------ ------- -- ---- -- - ------ --------------------- -- ------- --- ---- - - --- ------------------------------------ --- ------------------------------------ ---- --- -- ----- -------- ------ --- --------- - --- --- -- ----- --------- ------ --- --------- - --- --- -- ----- --------- ------ --- --------- - -- ------------------------------------ ----- ------------------------------------------ --- --- -- ----- -------- ------ --- --------- - -
在上面的代码中,我们将需要过滤、计算或映射的状态集中在getters
对象中。我们定义了四个Getter:
getCount
是用来获取存储器中的count
状态;getItems
是用来获取存储器中的items
状态;sumItems
是用来计算items
中所有物品的总价值;getItemById
是用来获取存储器中items
数组的指定项。
在组件中使用Getter,只需通过调用this.$store.getters.getterName
即可。例如,如果要获取计算出的sumItems
的值,则只需调用this.$store.getters.sumItems
即可。
总结
Getter是Vuex中的一个重要概念,它提供了一种方便的方式来获取存储器中的状态,同时还可以对状态进行过滤、计算、映射等操作。通过Getter,我们可以将应用程序的状态集中管理,避免了过多的重复代码,增强了代码的可维护性和可读性。
在实际开发中,有时我们需要在Getter中获取其他Getter的值,此时可以通过mapGetters
辅助函数来实现。同时,Getter也是一个只读属性,因此在组件中只能获取状态值,不能修改它们。但是,如果需要改变状态的值,我们可以使用Vuex中提供的Action来实现。
在实际开发中,通过合理的使用Getter,我们可以更好地管理应用程序的状态,提高应用程序的性能和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645e9b0b968c7c53b00e7e31