IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 关于Vuex的基本使用 -> 正文阅读

[JavaScript知识库]关于Vuex的基本使用

1.vuex简介

Vuex是专门为Vue框架提供的。用来管理状态的模块。集中式管理状态数据。它管理的数据可以追踪变化。它是在多个组件之间共享数据的方案。

在store/index.js 定义仓库对象,需要对仓库对象进行配置

state:需要共享的数据

mutations:定义修改state的同步的方法

getters:定义对状态的过滤的操作,类似于组件的计算结果

actions:定义异步获取数据并且赋值给state

modules:状态模块化

2.vuex的定义

state:状态,需要共享的数据 不能直接修改,要么通过actions异步进行,要么通过mutations进行同步修改.

export default new Vuex.Store({
? state: {
? ? a:10,
? ? txt:"hello",
? ? arr:["yesterday once more","my heart will go on"],
? ? name:{
? ? ? firstName:"张",
? ? ? lastName:"三"
? ? },
? ? homeData:[]
? },
})

mutations:同步修改state的字段,里面都是一些函数,修改state字段里面的状态。

? mutations: {
? ? // 参数1state对象,参数2调用的时候传递的实参
? ? setNum(state,v){
? ? ? state.a = v
? ? },
? ? // 修改txt状态的函数
? ? setTxt(state,v){
? ? ? state.txt = v
? ? },
? ? setHomeData(state,v){
? ? ? state.homeData ?= v
? ? }
? },

getters:类似于组件的计算结果,有返回值,过滤

? getters:{
? ? fullName(state){
? ? ? return state.name.firstName + state.name.lastName
? ? }
? },

actions: 异步获取数据并且通过同步修改的方法进行修改

actions: {
? ? // 参数1:仓库对象,参数2:可以传递一些参数
? ? queryData(store,v){
? ? ? return new Promise((resolve,reject)=>{
? ? ? ? axios.get("/api/test",{params:{page:1,pageSize:3}}).
? ? ? ? then(res=>{
? ? ? ? ? // 提交mutations方法,调用mutations中同步的方法
? ? ? ? ? store.commit("setHomeData",res.data.data)
? ? ? ? ? resolve()
? ? ? ? }).catch(err=>{
? ? ? ? ? reject(err)
? ? ? ? })
? ? ? })
? ? }
? },

3.vuex的使用

state: ?

1.$store.state.字段

? <p>{{ $store.state.a }}</p>//store全局唯一的对象

2.先通过maoState进行映射到computed里面然后去使用

// 导入vuex的映射函数
import {mapState} from "vuex"
export default {
? computed:{
// 映射状态的时候可以在组件的计算结果中进行映射,通过扩展运算符把仓库的一个状态以数组的形式写在mapstate的参数里面
? ? ...mapState(["a","txt","arr"])
? }
}

mutations:

1.this.$store.commit("setNum",传递的数据)

export default {
? methods: {
? ? f1() {
? ? ? // 第三种方法 通过commit提交方法进行提交修改
? ? ? this.$store.commit("setNum", 1000000);
? ? ? this.$store.commit("setTxt", "撒谎比");
? ? },
? },

2.先通过mapMutations进行映射到methods里面然后再去使用

import {mapMutations} from "vuex";
export default {
? methods: {
// 把mutations里面的修改方法映射到methods,相当于在本组件的methods中添加一些函数,可以在本组件使用
? ? ...mapMutations(["setNum", "setTxt"]),
? ? f1() {
? ? ? // 第一种修改状态的方法
? ? ? // this.setNum(100)
? ? ? // this.setTxt("你好")
? ? ? // 第二种修改 通过仓库对象访问状态直接进行修改,不建议去使用
? ? ? // this.$store.state.a = 1000000
? ? },
? },

actions

1.this.$store.dispatch("action的名字",传递的数据)

export default {
? created(){
? ? // 仓库里面的异步 action调用
? ? this.$store.dispatch("queryData","123").then(res=>{
? ? ? console.log("数据请求成功");
? ? })
? },
? methods:{
? ? ...mapActions(["queryData"])
? }
}

2.先通过mapActions进行映射到methods里面然后再去使用

import {mapActions,mapGetters} from "vuex"
export default {
? created(){
? ? this.queryData()
? },
? methods:{
? ? ...mapActions(["queryData"])
? }
}

getters:

1.this.$store.getters("getter的名字",传递的数据)

? <p>{{$store.getters.getSkill}}访问根仓库的getters</p>

2.先通过mapGetters进行映射到computed里面然后再去使用

import { mapGetters } from "vuex";
export default {
? computed: {
? ? ...mapGetters(["fullName"]),
? },
};

4.vuex子仓库的配置

// 导出的对象和仓库index.js的配置字段是一样的
export default{
// 模块化的仓库state是一个函数,像子组件中的一样
? ? state(){
? ? ? ? return{
? ? ? ? ? ? count:1,
? ? ? ? ? ? books:[],
? ? ? ? ? ? todos:[
? ? ? ? ? ? ? ? {id:1,text:"睡觉",done:false},
? ? ? ? ? ? ? ? {id:2,text:"吃饭",done:true},
? ? ? ? ? ? ? ? {id:3,text:"打豆豆",done:false},
? ? ? ? ? ? ? ? {id:4,text:"敲代码",done:true}]
? ? ? ? }
? ? },
? ? mutations:{
? ? ? ? setCount(state,v){
? ? ? ? ? ? state.count = v
? ? ? ? },
? ? ? ? setBooks(state,v){
? ? ? ? ? ? state.books = v
? ? ? ? }
? ? },
? ? getters:{
? ? ? ? // ?过滤未完成的事件
?  umcomplete:(state,getters,rootState)=>{
? ?// state:本模块的数据
? ?// getters:仓库中所有的getters,包括根仓库种getters,如果添加了命名空间getters就是本模块的getters
? ?// rootState 根仓库的状态
? ? ? ? ? ? return state.todos.filter(v=>{
? ? ? ? ? ? ? ? return !v.done
? ? ? ? ? ? })
? ? ? ? },
? ? ? ? // 过滤出已经完成的
? ? ? ? done:(state,getters,rootState)=>{
? ? ? ? ? ? return state.todos.filter(v=>{
? ? ? ? ? ? ? ? return v.done
? ? ? ? ? ? })
? ? ? ? }
? ? },
actions:{
async getData(store,v){
var result = await axios.get("/myApi/lurker/carguide/getwar
ningmsg?city=zz&type=2")
//把数据存入books,利用setBooks
store.commit("setBooks",result.data.data.content)
? ? ? ? }
? ? },
? ? modules:{
? ? },
? ? // 使用命名空间,以后本模块的数据需要通过指定命名空间进行访问
? ? // 在index.js的modules字段配置当中给模块进行空间的命名
namespaced:true
}

注意:模块仓库设置namespaced:true意为允许设置模块名,可以在根仓库种进行设置模块子仓库的名字,方便后面使用。在根仓库设置模块仓库的名代码如下:

先对子仓库进行导入,命名为moduleA
import moduleA from "./module.js"
//在根仓库的modules中设置名为a? 
modules: {
? ? a:moduleA
? }

5.使用子仓库

举例为根仓库下的a子仓库,在跟仓库命名为a

state

1 $store.dispatch("a/getData",100)

export default {
? ? created() {
? ? ? // 1直接使用.$store访问某块里面的action,dispatch函数的参数是"命名空间/action名字"
? ? ? this.$store.dispatch("a/getData",2)
? ? },
}

2先通过mapActions进行映射,...mapActions({b:"a/getData"}) ?this.b()

import {mapMutations} from "vuex"
export default {
? ? created() {
? ? ? ? this.b()
? ? },
? ? methods: {
?// mapActions()参数是一个对象 属性可以自定义属性,属性值模块中的action
? ? ? ...mapActions({b:'a/getData'}),? ?
? ? },
}

getters:

??1 $store.getters['a/done']

访问模块里面getter的时候 通过 $store.getters['a/getters']方式进行访问
? ? <p>{{$store.getters['a/done']}} 访问模块a里面的getters</p>

??2 先通过mapGetters进行映射,...mapGetters({b:"a/umcomplete",c:"a/done"})

import {mapGetters} from "vuex"
export default {
? computed:{
? ? ...mapGetters({b:"a/umcomplete",c:"a/done"})
? }
}

6.持久化存储

// 创建持久化存储对象
var vueLocal = new Vueinstance({
? // 存储方式,默认的是localStorage存储,可以修改成window.sessionStorage
? // storage:window.localStorage
? storage:window.sessionStorage
})

记得在组件中书写使用插件,使用持久化存储插件

? // 使用插件,使用持久化存储插件
? plugins:[vueLocal.plugin]

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:23:14  更:2021-12-24 18:23:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:25:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码