前端之Vuex

主要解决租价之间传值的问题。

npm install vuex@3/4

在这里插入图片描述

state:用于存储应用程序的状态数据
mutations:用于修改状态数据,外部不要直接对state进行修改。
getter:对状态数据进行处理例如过滤操作。
action:异步操作,网络请求是异步操作,该步骤在action中进行。
module:做数据隔离,针对不同模块下的应用设置不同数据。

具体的使用方法。

①新建一个js文件,里面专门存放State

在这里插入图片描述

import Vue from "vue";
import Vuex from "vuex"
Vue.use(Vuex)


const store = new Vuex.Store({
    state:{
        count:0,
        todos: [
            { id: 1, text: '吃饭', done: true },
            { id: 2, text: '睡觉', done: false }
          ]
    },
    mutations:{
        increment(state,n){
            state.count+=n
        }
    },
    getters:{
        doneTodos:state=>{
            //对于todos数组中每一个元素todo,如果todo.done为true啧该元素增加到新数组中,作为最终的返回。
            //箭头函数,箭头前是参数,箭头后取出箭头前参数的属性
            return state.todos.filter(todo =>todo.done)
        }
    }

})
export default store

创建好以后这个state就是数据仓库了

②在main.js中引入注入这个store机制

import Vue from 'vue'
import App from './App.vue'
import store from "./store/index"

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  store:store
}).$mount('#app')

③在组件中调用
注意其中的计算属性中使用...mapState,....mapGetters,以及方法中使用...mapMutations...mapActions就是对四种机制的映射,让我们使用起来更加方面,具体的映射可以看官网

<template>
  <div class="hello">
    {{ count }}
    <button @click="myadd">状态加一</button>
    <ul>
      <li v-for="todo in doneTodos" :key="todo.id">{{ todo.text }}</li>
    </ul>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations, mapActions  } from 'vuex';

export default {
  name: 'HelloWorld',
  computed:{
    ...mapState([
      'count',
      "todos"
    ]),
    ...mapGetters([
      "doneTodos"
    ]),
    
  },
  methods:{
    ...mapMutations([
      "increment"
    ]),
    ...mapActions([
      "increment"
    ]),
    myadd(){
      // this.$store.commit("increment",3)
      this.increment(3)
    }
  },
  props: {
    msg: String
  },
  
}
</script>

④module
module是面向不同模块的数据隔离。

const moduleA = {
  state: () => ({ ... }),
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}

const moduleB = {
  state: () => ({ ... }),
  mutations: { ... },
  actions: { ... }
}

const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态

相关推荐

  1. 前端vue3

    2024-04-12 14:30:05       42 阅读
  2. 前端常见面试题vue2

    2024-04-12 14:30:05       54 阅读
  3. 2024 前端高频面试题 Vue

    2024-04-12 14:30:05       48 阅读
  4. Vue前端Broadcast Channel API的简单使用

    2024-04-12 14:30:05       68 阅读
  5. 2024前端面试准备Vue3篇

    2024-04-12 14:30:05       63 阅读
  6. [前端]开启VUE路-NODE.js版本管理

    2024-04-12 14:30:05       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 14:30:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 14:30:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 14:30:05       87 阅读
  4. Python语言-面向对象

    2024-04-12 14:30:05       97 阅读

热门阅读

  1. 后端项目部署教程

    2024-04-12 14:30:05       37 阅读
  2. Vue 3 中,defineExpose 在<script setup> 中的使用

    2024-04-12 14:30:05       33 阅读
  3. 使用列表递推实现螺旋矩阵

    2024-04-12 14:30:05       35 阅读
  4. 如何通过子网掩码来计算IP的地址范围

    2024-04-12 14:30:05       31 阅读
  5. 【Spring高级】SpringMVC处理流程总结

    2024-04-12 14:30:05       40 阅读
  6. ffmpeg编解码opus注意事项

    2024-04-12 14:30:05       41 阅读