vue3中如何使用vuex

news2024/9/22 16:54:11

最近想出一版如何在vue3中使用vuex

        首先,在这里回答一个粉丝的问题,为什么有local storage 和session storage还要使用vuex,这里我解释一下,我们要明白浏览器的存储和vuex的存储的不同点,首先,浏览器存在本地,vuex存在内存里,所以vuex刷新会丢失,从现在来看,好像存在浏览器里会更好,但是,有个问题时,存在浏览器里不是响应式的啊,只有存在vuex才是响应式啊,我们通过计算属性或者watch监听下在同步更新下就行,但是,浏览器不支持响应式,所以,我们为了规避掉vuex的的刷新丢失的问题,所以,当刷新时,从浏览器的存储里拿数据,防止在vuex里面,在传给组件,借助vuex的特性,实现浏览器本地存储的内容响应式组件,这里可能又有人杠了,说,有方法能够不通过vuex实现浏览器存储响应式,但是,你没发现,这不就和vuex的状态管理一样吗,原装的不用,用一个不健全的状态管理,早晚得出问题!!

言归正传

1,下载vuex

        npm i vuex@next --save

2,创建vuex对象

        2.1 在src文件夹下新建一个文件夹store,在文件夹下面新建index.ts文件

        

        2.2 在index.ts文件里创建vuex对象

import { createStore } from 'vuex'

export default createStore({
  state: {
    name:123
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

        2.3 在入口文件main.ts那里将store对象添加到vue实例里去

3.vuex介绍

        3.1 store 

                数据的存储位置,所有的数据都会存储在这里。

        3.2 getters

                类似于计算属性,当state的数据有变化时,执行这里的代码,首次执行

        3.3 mutations

                修改store里的数据的代码需要在这里面进行填写,但是在这里不能异步修改store的数据。

        3.4 actions

                异步修改store的数据,异步执行完成后,调用mutations的修改函数,对store的数据进行修改。

4. store

        定义

        

import { createStore } from 'vuex'

export default createStore({
  state: {
    name:123
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

        在组件中使用

         这里一定要注意下,要记得配合技术属性computed来使用,这样就能同步更新了

<template>
  <div>
    {{ name }}
  </div>
</template>

<script lang="ts">
import { useStore } from 'vuex' //导入usestore方法来获取store数据
import { onMounted } from 'vue';
import axios from "axios"
export default {
  setup() {
    const store = useStore()  //将方法赋值给store
     const name = computed(()=>store.state.arr) //通过state.name来获取name的数据
    return {
      name
    }

  }

}
</script>

5.getters

        

import { createStore } from 'vuex'

export default createStore({
  state: {
    name:123
  },
  getters: {
    counte(state){ //定义好后在页面上直接使用即可,只能接受一个参数,这个参数就是来自于state
      return state.name+1
    }
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

        在页面上配合computed计算属性使用

const message = computed(()=>store.getters.counte)

         5.1 getters如何接收组件传入的参数  

                寻常方法肯定是不能接收组件传入的参数,得使用特殊的方法,需要在vuex里这样定义

  getters: {
    counte(state){
      return (sum:any)=>{ //返回一个函数,函数接收一个形参,然后在组件中调用时传入实参即可获取到,如果通过获取到的参数和store里的数据进行计算后在return即可
        return state.name+sum
      }
    }
  },

        在组件中

   const message = computed(()=>store.getters.counte(999))

         counte(999),其中999就是我们传递的参数

6.mutations

           6.1 修改基础类型数据

           我们想要修改store里的数据,只能通过mutations进行修改,修改store只有这一个渠道

            在vuex中

    

  mutations: {
    updata(store){
      store.name=777
    }
  },

        在组件中调用修改函数进行修改,只需要把updata函数绑定一个点击时间即可,其中commit接收一个对象,对象里type的属性值就是我们在mutations里定义好的修改store内容的函数名称

    const updata=()=>{
      store.commit({type:"updata"})
    }

        6.2 修改引用数据类型(数组)

        由于我们在mutations接收的store的数据如果是引用类型的数据的话,我们接收的数据只是该数据的地址,所以,如果要修改数组的话,只能是将store的数据全部替换

        先解构,然后在重新赋值,这样就能实现修改store里数组的数据了

    arrupdata(store){
      let arr1=[...store.ar]
      arr1[2]=999
      store.arr=arr1
    }

        在组件中使用

        

    const updata = () => {
     store.commit("arrupdata")
    }

        6.3 修改引用类型数据(对象)

                 这里用的思路和修改数组的思路一致,但是要借助一点的是,就是使用对象的属性,先将对象解构,然后重新填入对象里要修改的属性,对象有个特性,就是属性相同时,后传入的覆盖之前传入的,这也就能修改对象数据。

  state: {

    obj:{name:"张三"}
  },

  mutations:{
    objupname(state){
      state.obj={...state.obj,name:"李四"}  //重新传入一个name,属性值是我们要新修改的内容
    }
  },

7,异步修改数据

        异步修改state里的数据大体的逻辑是,在异步修改时,调用mutations进行修改state的数据。代码如下

const store = createStore({
  state: {

    obj:{name:"张三"}
  },

  mutations:{
    objupname(state){
      state.obj={...state.obj,name:"李四"}  //重新传入一个name,属性值是我们要新修改的内容
    }
  },
  actions:{
    fn(commtext){  //接收一个参数,这个参数是mutations里定义的方法
      setTimeout(()=>{ //写于异步代码
        commtext.commit({type:"objupname"}) //调用mutations里的修改方法进行修改state里的数据
      },3000)
    }
  }
});

在组件中使用

import { useStore } from 'vuex';
export default ({
    
    setup() {

        const store = useStore()
        const updata =()=>{
            store.dispatch({type:"fn"})
        }

同时,直接接收组件中的参数

  actions:{
    fn(commtext,payload){  //接收2个参数,第一个参数是vuex里的修改函数,第二个参数是组件中传入进来的数据
      console.log(payload,99)
      setTimeout(()=>{ 
        commtext.commit({type:"objupname"}) 
      },3000)
    }
  }

在组件中传入,属性名称随便定义,属性值就是我们要传递给actions里的数据

        const updata =()=>{
            store.dispatch({type:"fn",a:1111})
        }

打印如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1353858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】AJAX(学习笔记)

一、AJAX基础 1、 AJAX 有什么用 浏览器和服务器之间通信&#xff0c;动态数据交互 2、axios库的使用 引入axios库 <script src"https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.js"></script>使用axios函数 axios({url: http://hmajax.ithei…

nginx在国产服务器上stream配置项无法识别的问题

最近在搭建k8sranchar&#xff0c;需要用到nginx做负载均衡&#xff0c;之前在系统中也会用到&#xff0c;之前一直使用http选项&#xff0c;做转发配置。 基本格式如下图所示&#xff1a; 但是在ranchar的安装中默认方式使用stream配置项。 使用yum默认安装的nginx不支持该关…

.babky勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 网络安全威胁不断进化&#xff0c;其中.babky勒索病毒引起了广泛关注。这篇文章91数据恢复将深入介绍.babky的狡猾特征&#xff0c;以及在遭受其袭击时如何高效地恢复被加密的数据&#xff0c;并提供实用的预防方法。当面对被勒索病毒攻击导致的数据文件加密…

类的加载机制、主动引用、被动引用、什么是类加载器、类加载器的分类、自定义类的加载器

类的加载机制、类加载器 类的加载时机主动引用被动引用 类加载器什么是类加载器类的加载器分类什么情况下需要自定义类的加载器 类的加载时机 主动引用 虚拟机规范中并没有强制约束何时进行加载&#xff0c;但是规范严格规定了只有下列六种情况必须对类进行加载: 当遇到new.…

光子学考试

光子学 一二三四 一 a) Use a symmetry argument to find the expectation value of the electric dipole moment < e r > <\mathrm{er}> <er> of an atom in an eigenstate. 采用对称性论证找到原子在本征态中的电偶极矩 < e r > <\mathrm{er}&g…

鸿蒙南向开发—PWM背光(OpenHarmony技术)

背光驱动模型也是基于HDF框架开发的&#xff0c;整个框架如下&#xff1a; 现在以RK3568为例&#xff0c;来看看PWM背光整个驱动&#xff0c;这里使用的是PWM占空比控制的背光&#xff0c;默认基于hdf的pwm驱动已经OK&#xff01; 需要注意的是&#xff1a;这里是基于HDF实现的…

C++ 多态向下转型详解

文章目录 1 . 前言2 . 多态3 . 向下转型3.1 子类没有改进父类的方法下&#xff0c;去调用该方法3.2 子类有改进父类的方法下&#xff0c;去调用该方法3.3 子类没有改进父类虚函数的方法下&#xff0c;去调用改方法3.4 子类有改进父类虚函数的方法下&#xff0c;去调用改方法3.5…

捕捉“五彩斑斓的黑”:锗基短波红外相机的多种成像应用

红外处于人眼可观察范围以外&#xff0c;为我们了解未知领域提供了新的途径。红外又可以根据波段范围&#xff0c;分为短波红外、中波红外与长波红外。较短的SWIR波长——大约900nm-1700nm——与可见光范围内的光子表现相似。虽然在SWIR中目标的光谱含量不同&#xff0c;但所产…

JRT控制打印机

本次测试打印机控制和纸张方向控制。 打印机状态 选择打印机 控制纸张 定义纸张 旋转纸张 不旋转纸张 A4

java代码规范(适合写程序之前先了解有助于开发协同)

目录 一、类定义 二、方法定义 三、接口定义 四、变量定义 1、命名规范&#xff1a; 2、类型规范&#xff1a; 3、常量规范&#xff1a; 五、static关键字 1、静态变量&#xff08;类变量&#xff09;&#xff1a; 2、静态方法&#xff08;类方法&#xff09;&#x…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff09;…

Netty使用SSL实现双向通信加密

最近项目有个需求,TCP服务器实现基于证书通信加密,之前没做过,花了一些时间调研,今天整理下。 SSL(Secure Sockets Layer 安全套接字协议) 1、原理 算法原理 简而言之就是非对称加密算法 私钥自己持有,公钥发给对方,对方在发送信息的时候使用公钥进行加密数据,当接收到…

C++-类和对象(2)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下 6 个默认成员 函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译…

【AI】DETR模型可视化操作

Detr作为目标检测的算法&#xff0c;不同于之前算法的就是注意力机制&#xff0c;注意力机制能够直观看出来模型对图像关注的点&#xff0c;这个直观到底怎么直观呢&#xff0c;我们只听别人说肯定是不行的&#xff0c;上手测试才是最好的方式&#xff0c;像论文中插图那样的使…

【网络流】最大流与Ford–Fulkerson算法

目录 一、引言1.1 网络流问题1.2 “流”的定义1.3 “割”的定义 二、最大流最小割2.1 最大流2.2 最小割2.3 最大流最小割定理2.4 最大流最小割定理证明 三、Ford–Fulkerson算法3.1 增广路径3.2 剩余图3.3 算法代码3.4 FordFulkerson Demo 一、引言 1.1 网络流问题 网络流问题…

【教学类-43-13】 20240103 (4宫格数独:错误版:768套) 不重复的基础模板数量:768套

作品展示&#xff1a;——4宫格 768套不重复模板&#xff08;64页*12套题&#xff09; 有错误&#xff0c;实际数量小于768套 背景需求&#xff1a; 测试4宫格数独基础模板有几种。 写个程序&#xff0c;验算是不是真的是乘阶法的288种。 代码展示&#xff1a; 768套4宫格题…

AI原生应用开发“三板斧”亮相WAVE SUMMIT+2023

面对AI应用创新的风口跃跃欲试&#xff0c;满脑子idea&#xff0c;却苦于缺乏技术背景&#xff0c;不得不望而却步&#xff0c;这曾是许多开发者的苦恼&#xff0c;如今正在成为过去。 12月28日&#xff0c;WAVE SUMMIT深度学习开发者大会2023在北京举办。百度AI技术生态总经理…

【Java 基础】-- 实例化

1、定义 创建对象的过程就叫实例化。这个过程中会在堆中开辟内存&#xff0c;将一些非静态的方法&#xff0c;变量存放在里面。在程序执行的过程中&#xff0c;可以创建多个对象&#xff0c;既多次实例化。每次实例化都会开辟一块新的内存。 2、实例化的几种方法 new 关键字创…

STM32学习笔记十七:WS2812制作像素游戏屏-飞行射击游戏(7)探索动画之故事板,复杂动画

要让物体沿着路径移动&#xff0c;必须同时修改X/Y两个值&#xff0c;用两个连续插值动画行不行&#xff1f; 在单片机这种单线程设备&#xff0c;两个TICK会前后脚进行修改&#xff0c;具有相同的时间跨度&#xff0c;所以似乎也是可以的。但是在支持多线程的设备&#xff0c…

【CVPR2023】使用轻量 ToF 传感器的单目密集SLAM的多模态神经辐射场

目录 导读 本文贡献 本文方法 轻量级ToF传感器的感知原理 多模态隐式场景表示 时间滤波技术 实验 实验结果 消融实验 结论 未来工作 论文标题&#xff1a;Multi-Modal Neural Radiance Field for Monocular Dense SLAM with a Light-Weight ToF Sensor 论文链接&am…