1、vuex状态管理

vuex是一个专为vue.js应用程序开发的状态管理模式+库。
在vue自定义组件中我们知道父子组件之间的数据是可以进行交互传递的,但如果没有关联的组件之间或者是包含层级更多更深的组件之间的数据要如何进行有条理高效的交互呢?vuex的作用就是方便组件之间的数据交互的,它提供store统一管理数据,任何组件均可直接进行读取和修改,而不需要在组件之间一层一层的来回进行传递。
如下图,左边是一层一层的数据传递交互,右边是任何组件均可直接读取store中的数据:
image.png

2、vuex安装

  1. npm install --save vuex

3、添加vuex的配置js文件

在src下创建新的文件夹store,并创建新的文件index.js,在index.js里写入以下代码:

  1. import { createStore } from 'vuex'
  2. export default createStore({
  3. // 所有的数据都放在这里
  4. state: {
  5. counter: 0,
  6. },
  7. getters: {
  8. },
  9. mutations: {
  10. },
  11. actions: {
  12. },
  13. modules: {
  14. }
  15. })

4、在main.js中引入store

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import './registerServiceWorker'
  4. import router from './router'
  5. import store from './store'
  6. createApp(App).use(store).use(router).mount('#app')

5、在任意组件中便可进行读取访问了

读取方式1:

  1. <template>
  2. <h3>关于我们</h3>
  3. <p>读取counter:{{ $store.state.counter }}</p>
  4. </template>

读取方式2:

  1. <template>
  2. <h3>关于详情</h3>
  3. <p>读取counter方式1:{{ $store.state.counter }}</p>
  4. <p>读取counter方式2:{{ counter }}</p>
  5. </template>
  6. <script>
  7. // mapState是vuex所提供的快捷读取方式
  8. import { mapState } from 'vuex'
  9. export default {
  10. name: "AboutInfoView",
  11. // 在computed里存放vuex的数据
  12. computed: {
  13. ...mapState(["counter"])
  14. }
  15. }
  16. </script>