目录
1.vuex是什么" >1.vuex是什么
2.四个map方法的使用
首页 web前端 Vue.js 浅析集中式状态管理Vuex的使用方法

浅析集中式状态管理Vuex的使用方法

Feb 03, 2023 pm 06:19 PM
vuex

如何使用集中式状态管理的Vuex?下面本篇文章就带大家了解一下vuex,简单聊聊vuex的使用方法,希望对大家有所帮助!

浅析集中式状态管理Vuex的使用方法

1.vuex是什么

一个专门在Vue中实现集中式状态管理的一个Vue插件,可以对vue应用中多个组件的共享状态进行集中式的管理(读取/写入),也是一种组件间通信的方式,并且适用于任意组件间通信

2.什么时候使用Vuex

1.多个组件依赖于同一状态

2.来自不同组件的行为需要变更同一状态

2.1如何使用Vuex

首先我们要知道,如果使用了Vuex就大概率需要两个或者多个组件共享一套数据/状态,所以首先需要准备两个组件(分别为Count,Person),再就是我们要在src目录下添加一个store文件,因为Vuex就是依靠store来进行一系列的准备任务的

2.2Count组件

在这个组件内我们可以看到map...一堆东西,这里我们就不得不说vuex里面的四个map了,如何使用map方法我放到了最后,这里我们只介绍一下该组件的功能Count是个有着“强大”计算功能的组件,它可以进行将最后的数进行放大10倍,可以奇数运算,可以延迟运算可谓是极其的“强大”

<template>
  <div>
    <h3>当前和为:{{sum}}</h3>
    <h3>当前和为:放大10倍:{{bigSum}}</h3>
    <h3>我在{{school}},学习{{subject}}</h3>
    <h3>下方组件的总人数{{personList.length}}</h3>

    <select v-model.number="num">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="increment(num)">+</button>
    <button @click="decrement(num)">-</button>
    <button @click="incrementOdd(num)">奇数+</button>
    <button @click="incrementWait(num)">500ms后再+</button>
  </div>
</template>
<script>
// 引入mapState等
import { mapState, mapGetters, mapMutations, mapActions } from "vuex";
export default {
  name: "Count",
  data() {
    return {
      num: 1 // 用户选择的数字
    };
  },
  computed: {
    // 使用mapState生成计算属性,从state种读取数据(...mapstate()的意思是将其内的对象全部展开的计算属性里面)
    // ...mapState({ sum: "sum", school: "school", subject: "subject" }), // 对象写法
    ...mapState(["sum", "school", "subject", "personList"]), // 数组写法
    // 使用mapGetters生成计算属性,从getters种读取数据
    // ...mapGetters(["bigSum"]), // 数组写法
    ...mapGetters({ bigSum: "bigSum" }) // 数组写法
  },
  methods: {
    // 借助mapMutations生成对应的方法,方法种会调用相应的commit去联系mutations
    ...mapMutations({ increment: "JIA", decrement: "JIAN" }), // 对象式
    ...mapActions({ incrementOdd: "jiaodd", incrementWait: "jiaWait" }) //数组式
    // ...mapActions(["jiaodd", "jiaWait"]) //数组式简写
  },
  mounted() {
  }
};
</script>
<style>
button {
  margin-left: 5px;
}
</style>
登录后复制

2.3Person组件

Person组件有着“强大”的人员添加的功能,他可以按照自己的意愿进行添加你的亲朋好友等

<template>
  <div>
    <h3>人员列表</h3>
    <h3>Count组件的求和为{{sum}}</h3>
    <input type="text" placehodler="请输入名字" v-model="name">
    <button @click="add">添加</button>
    <ul>
      <li v-for="p in personList" :key="p.id">{{p.name}}</li>
    </ul>
  </div>
</template>
<script>
import { nanoid } from "nanoid";
export default {
  name: "Person",
  data() {
    return {
      name: ""
    };
  },
  computed: {
    personList() {
      return this.$store.state.personList;
    },
    sum() {
      return this.$store.state.sum;
    }
  },
  methods: {
    add() {
      const personObj = { id: nanoid(), name: this.name };
      this.$store.commit("ADD_PERSON", personObj);
      this.name = "";
    }
  }
};
</script>
登录后复制

2.4引入组件

分别再App内引入这两个组件

<template>
  <div class="container">
    <Count></Count>
    <Person/>
  </div>
</template>

<script>
import Count from "./components/Count";
import Person from "./components/Person";
export default {
  name: "App",
  components: { Count, Person }
};
</script>
登录后复制

2.5配置store文件夹下的index.js

要在store文件夹下面新建一个index.js文件,然后再index文件里面进行写入如下代码,首先是引入vue和vuex,再使用action进行动作响应,在这里我们可以接收到两个参数分别式contextvalue他们分别式上下文和所传入的值,我们可以再context身上发现我们所配置的state里面的所有东西,这就是context身上的东西,和value,这里value的值就是1

浅析集中式状态管理Vuex的使用方法

// 创建VUex种的store核心
import Vue from &#39;vue&#39;
// 引入Vuex
import Vuex from &#39;vuex&#39;
// 使用vuex插件
Vue.use(Vuex)
// 准备actions——用于组件内的动作响应
const actions = {
    // 奇数加法
    jiaodd(context, value) {
        if (context.state.sum % 2) {
            context.commit(&#39;JIA&#39;, value)
        }
    },
    // 延迟加
    jiaWait(context, value) {
        setTimeout(() => {
            context.commit("JIA", value)
        }, 500);
    },
}
// 准备mutations——用于数据操作
const mutations = {
    JIA(state, value) {
        state.sum += value
    },
    JIAN(state, value) {
        state.sum -= value
    },
    ADD_PERSON(state, value) {
        console.log(&#39;mustations种的ADD_PERSON被调用&#39;,state.personList);
        state.personList.unshift(value)
    }
}
// 准备state——用于数据的储存
const state = {
    sum: 0, // 当前和
    school: &#39;山鱼小学&#39;,
    subject: &#39;前端&#39;,
    personList:[{id:&#39;001&#39;,name:&#39;张三&#39;}]
}
// 用于加工state种的数据
const getters = {
    bigSum(state) {
        return state.sum * 10
    }
}
// 创建store并且暴露store
export default new Vuex.Store({
    // actions: actions,// 前后名称一样所以可以触发简写模式
    actions,
    mutations,
    state,
    getters
});
登录后复制

2.四个map方法的使用

1.mapState:用于帮助我们映射state中的数据为计算属性

computed: {
    // 使用mapState生成计算属性,从state种读取数据(...mapstate({})的意思是将其内的对象全部展开的计算属性里面)
    ...mapState({ sum: "sum", school: "school", subject: "subject" }), // 对象写法
        
    // ...mapState(["sum", "school", "subject"]), // 数组写法
  }
登录后复制

2.mapGetters:用于帮助我们映射getters中的数据为计算属性

computed: {
    // 使用mapGetters生成计算属性,从getters种读取数据
    ...mapGetters({bigSum:"bigSum"})
    ...mapGetters(["bigSum"])
  }
登录后复制

3.mapMutations:用于帮助我们生成与mutations交流的方法,包含$store.commit()的函数

methods: {
    // 借助mapMutations生成对应的方法,方法种会调用相应的commit去联系mutations
    ...mapMutations({ increment: "JIA", decrement: "JIAN" }), // 对象式
    // ...mapMutations(["JIA", "JIAN"]), // 数组式(button的名字和vuex里面的名字必须统一)
  },
登录后复制

3.mapActions:用于帮助我们生成与mutations交流的方法,包含$store.commit()的函数

  methods: {
     // 借助mapActions生成对应的方法,方法种会调用相应的dispath去联系actions
    ...mapActions({ incrementOdd: "jiaodd", incrementWait: "jiaWait" }), //对象式
    // ...mapActions(["jiaodd", "jiaWait"]) //数组式
  },
登录后复制

注:mapActions与mapMutations使用时,若需要传递参数需要在模板中绑定事件时传递好参数,否则参数是事件对象。

(学习视频分享:vuejs入门教程编程基础视频

以上是浅析集中式状态管理Vuex的使用方法的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Vue2.x中使用Vuex管理全局状态的最佳实践 Vue2.x中使用Vuex管理全局状态的最佳实践 Jun 09, 2023 pm 04:07 PM

Vue2.x是目前最流行的前端框架之一,它提供了Vuex作为管理全局状态的解决方案。使用Vuex能够使得状态管理更加清晰、易于维护,下面将介绍Vuex的最佳实践,帮助开发者更好地使用Vuex以及提高代码质量。1.使用模块化组织状态Vuex使用单一状态树管理应用的全部状态,将状态从组件中抽离出来,使得状态管理更加清晰易懂。在具有较多状态的应用中,必须使用模块

在Vue应用中使用vuex时出现“Error: [vuex] do not mutate vuex store state outside mutation handlers.”怎么解决? 在Vue应用中使用vuex时出现“Error: [vuex] do not mutate vuex store state outside mutation handlers.”怎么解决? Jun 24, 2023 pm 07:04 PM

在Vue应用中,使用vuex是常见的状态管理方式。然而,在使用vuex时,我们有时可能会遇到这样的错误提示:“Error:[vuex]donotmutatevuexstorestateoutsidemutationhandlers.”这个错误提示是什么意思呢?为什么会出现这个错误提示?如何解决这个错误?本文将详细介绍这个问题。错误提示的含

Vue3中Vuex怎么使用 Vue3中Vuex怎么使用 May 14, 2023 pm 08:28 PM

Vuex是做什么的?Vue官方:状态管理工具状态管理是什么?需要在多个组件中共享的状态、且是响应式的、一个变,全都改变。例如一些全局要用的的状态信息:用户登录状态、用户名称、地理位置信息、购物车中商品、等等这时候我们就需要这么一个工具来进行全局的状态管理,Vuex就是这样的一个工具。单页面的状态管理View–>Actions—>State视图层(view)触发操作(action)更改状态(state)响应回视图层(view)vuex(Vue3.

在Vue应用中使用vuex时出现“Error: [vuex] unknown action type: xxx”怎么解决? 在Vue应用中使用vuex时出现“Error: [vuex] unknown action type: xxx”怎么解决? Jun 25, 2023 pm 12:09 PM

在Vue.js项目中,vuex是一个非常有用的状态管理工具。它可以帮助我们在多个组件之间共享状态,并提供了一种可靠的方式来管理状态的变化。但在使用vuex时,有时会遇到“Error:[vuex]unknownactiontype:xxx”的错误。这篇文章将介绍该错误的原因及解决方法。1.错误原因在使用vuex时,我们需要定义一些actions和mu

深入了解vuex的实现原理 深入了解vuex的实现原理 Mar 20, 2023 pm 06:14 PM

当面试被问vuex的实现原理,你要怎么回答?下面本篇文章就来带大家深入了解一下vuex的实现原理,希望对大家有所帮助!

在Vue应用中使用vuex时出现'TypeError: Cannot read property 'xxx' of undefined”怎么解决? 在Vue应用中使用vuex时出现'TypeError: Cannot read property 'xxx' of undefined”怎么解决? Aug 18, 2023 pm 09:24 PM

在Vue应用中使用Vuex是非常常见的操作。然而,偶尔在使用Vuex时会遇到错误信息“TypeError:Cannotreadproperty'xxx'ofundefined”,这个错误信息的意思是无法读取undefined的属性“xxx”,导致了程序的错误。这个问题其实产生的原因很明显,就是因为在调用Vuex的某个属性的时候,这个属性没有被正确

vue3 vite中如何使用vuex vue3 vite中如何使用vuex Jun 03, 2023 am 09:10 AM

具体步骤:1、安装vuex(vue3建议4.0 )pnpmivuex-S2、main.js中配置importstorefrom&#39;@/store&#39;//hx-app的全局配置constapp=createApp(App)app.use(store)3、新建相关的文件夹与文件,这里配置多个不同vuex内部的js,使用vuex的modules来放不同的页面,文件,然后统一使用一个getters.jsindex.js核心文件,这里使用了import.meta.glob,而不

Vue中如何使用vuex进行组件通讯? Vue中如何使用vuex进行组件通讯? Jul 19, 2023 pm 06:16 PM

Vue中如何使用vuex进行组件通讯?Vue是一款流行的JavaScript框架,它采用组件化的开发模式,使得我们能够更方便地构建复杂的应用程序。在Vue的组件化开发过程中,经常会遇到需要不同组件之间进行通信的情况。Vuex是Vue官方推荐的状态管理工具,提供了一个集中式的存储管理器,解决了组件之间通信的问题。本文将介绍如何在Vue中使用Vuex进行组件通信

See all articles