当前位置:   article > 正文

[Vuex系列] - 细说state的几种用法

vue state: ()用法

state 存放的是一个对象,存放了全部的应用层级的状态,主要是存放我们日常使用的组件之间传递的变量。

我们今天重点讲解下state的几种用法,至于如何从头开始创建Vuex项目,请看我写的第一个文章。点击查看

用法一:使用this.$store

我们还是以一个累加器的例子来看如何实现,具体实现代码如下:

在state.js文件中添加一个count的变量

  1. const state = {
  2. count: 0
  3. }
  4. export default state
  5. 复制代码

在src文件夹下新建一个state文件夹,并新建index.vue文件,文件内容如下:

  1. <template>
  2. <div class="state">
  3. <h2>{{ count }}</h2>
  4. <button @click="add">+ADD</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. computed: {
  10. count () {
  11. // 第一种用法
  12. return this.$store.state.count
  13. }
  14. },
  15. methods: {
  16. add () {
  17. // 第一种用法
  18. this.$store.state.count++
  19. }
  20. }
  21. }
  22. </script>
  23. 复制代码

在Vue根实例中注册了store选项,该store实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。

用法二:引用store.js文件

具体实现代码如下:

state.js文件内容参考上面的例子,修改state/index.vue,内容如下:

  1. <template>
  2. <div class="state">
  3. <h2>{{ count }}</h2>
  4. <button @click="add">+ADD</button>
  5. </div>
  6. </template>
  7. <script>
  8. import store from '@/store/store.js'
  9. export default {
  10. computed: {
  11. count () {
  12. // 第二种用法
  13. return store.state.count
  14. }
  15. },
  16. methods: {
  17. add () {
  18. // 第二种用法
  19. store.state.count++
  20. }
  21. }
  22. }
  23. </script>
  24. 复制代码

这种方法在Vue的模块化的构建系统中,在每个需要使用state的组件中需要频繁地导入。

用法三:使用mapState辅助函数

具体实现代码如下:

state.js文件内容参考上面的例子,修改state/index.vue,内容如下:

  1. <template>
  2. <div class="state">
  3. <h2>{{ count }}</h2>
  4. </div>
  5. </template>
  6. <script>
  7. // import store from '@/store/store.js'
  8. import { mapState } from 'vuex'
  9. export default {
  10. computed: mapState({
  11. count: state => state.count
  12. })
  13. }
  14. </script>
  15. 复制代码

  1. <template>
  2. <div class="state">
  3. <h2>{{ count }}</h2>
  4. </div>
  5. </template>
  6. <script>
  7. // import store from '@/store/store.js'
  8. import { mapState } from 'vuex'
  9. export default {
  10. computed: {
  11. ...mapState(['count'])
  12. }
  13. }
  14. </script>
  15. 复制代码

当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性


一、[Vuex系列] - 初尝Vuex第一个例子

二、[Vuex系列] - 细说state的几种用法

三、[Vuex系列] - Mutation的具体用法

四、[Vuex系列] - getters的用法

五、[Vuex系列] - Actions的理解之我见

六、[Vuex系列] - Module的用法(终篇)


转载于:https://juejin.im/post/5cbdd6bef265da038c0213b1

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号