vuex - 21年的笔记 - 后续更新

news/2024/7/24 2:20:00 标签: 笔记, 前端, javascript

vuex是什么

Vuex是实现组件全局状态(数据)管理的一种机制,方便的实现组件之间的数据的共享

使用vuex统一管理状态的好处

  • 能够在vuex中集中管理共享的数据,易于开发和后期维护
  • 能够高效地实现组件之间的数据共享,提高开发效率
  • 存储在vuex中的数据都是响应式的,能够实时保持数据与页面的同步

使用vuex

  • npm install vuex –save
  • 创建store.js文件在src项目中,项目中的代码为:代码1
  • 在main.js中引入store:import store from ‘./store’
  • 在main.js的new Vue({})中添加:代码2
javascript">// 代码1
export default Vuex.Store = new Vuex.Store({
    //state中存放的就是全局共享数据
    state:{ },
    mutation:{ },
    action:{ }
    getters: {  }
})
javascript">new Vue({
 el: '#app',
  router,
  components: { App },
  template: '<App/>',
  store,
  render:h=>h(App)
}).$mount('#app')

访问state中数据方式

javascript">// 以count数据为例: this.$store.state.count 
import { mapState } from 'vuex' // 从vuex中按需导入mapState函数
// 通过刚才导入的mapSate函数,将当前组件需要的全局数据,映射为当前组件的computed计算属性
computed: { ...mapState( [ 'count' ])

Mutation

Mutation用于变更store中的数据

  • 只能通过mutation变更store数据,不可以直接操作Store中的数据
  • 通过mutation方式虽然操作稍微繁琐,但是可以集中监控所有数据的变化
  • Mutation中定义对应的数据处理函数
  • Mutation中的事件处理函数的传值,一个是本身的传值,一个为接收的值
  • 在mutation中不能写异步代码,如计时器setTimeout等,异步操作写在action中
javascript">//传递的参数,接收的参数
add(state,step){
  state.count += step
}

触发mutaion

在methods中触发:

javascript">//在使用数据的页面中处理,该情况为调用stare.js中mutation中的add方法
handle(){
    //在接收的方法,传递的参数
    this.store.commit('add', 3)  //commit的作用就是调用某个mutation函数
}

从vuex中按需导入mapMutation函数

javascript">import { mapMutations } from vuex
// 通过刚才导入的mapMutation函数,将需要的mutation函数,映射为当前组件的methods方法:(例如调用store.js中的add和del方法)
methods:{ ...mapMutations( ['add', 'del'] )  } 

actions

Actions用于异步操作,但是在Actions中还是要通过触发Mutation的方式间接变更数据

javascript">const store = new Vuex.store({
      // ...省略其他代码
      mutations: {
        add(state) {
          state.count++
        }
      },
      actions: {
        addAsync(context) {
          setTimeout(() => {
            context.commit('add')
          }, 1000)
        }
      }
    })

在这里插入图片描述

Commit只能触发mutation中的某个函数,通过接收形参context来点出commit
在Actions中不能直接修改state中的数据,必须通过context.commit触发某个motation才行
下图中的dispath函数是专门用来触发actions的
若带有参数,则将参数接在后面
在这里插入图片描述

javascript">// 从vuex中按需导入mapActions函数
import { mapActions } from 'vuex'

methods: {  // 将所需的函数映射到当前组件的methods中
    ...mapAction( ['addAsync', 'delAsync'] ),
    ...mapMutation(['add','del'])
} 

//在mapMutations或mapActions中映射方法后,可以直接@click调用方法
<el-button @click="add"></el-button>

Getter

Getter用于对Store中的数据进行加工处理,并不修改store中的数据

javascript">getters:{
    showNum(state){
      return '当前的数量是:'+state.count+'.'
    }
 }

使用getter的方式

javascript">// This.$store.getter.名称: {{ $store.getters.showNum }}

import { mapGetters } from 'vuex'
conputed:{ ...mapGetters( ['showNum'] ) 

http://www.niftyadmin.cn/n/5444790.html

相关文章

国内区块链公司哪个好

目录 1. 蚂蚁金服(Ant Financial) 2. 腾讯(Tencent) 3. 阿里巴巴(Alibaba) 4. 海尔智家(Haier Smart Home

java中使用@Pointcut和使用自定义注解对切面增强的区别

1、定义方式不同&#xff1a; Pointcut&#xff1a;是Spring AOP框架提供的注解&#xff0c;用于定义切点表达式。例如&#xff1a;Pointcut(“execution(* com.example.service..(…))”)。 自定义注解&#xff1a;需要自己创建一个新的注解&#xff0c;并在切面类上使用该注…

Java 应用程序监控

Java 监控涉及监控在 Java 上运行的应用程序的关键性能指标&#xff0c;以及 支持 Java 应用程序的服务器。Java 监控可以帮助优化 Java 应用程序的性能&#xff0c;发现和识别以下问题&#xff1a; 导致常见的应用程序问题&#xff0c;并在问题影响最终用户之前解决问题。 Ja…

【Linux中vim系列】如何在vim中检索字符串

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Docker 笔记(八)--Dockerfile

目录 1. 背景2. 参考3. 原文3.1 Dockerfile 支持的指令3.2 Dockerfile格式3.3 Parser指令syntaxescape 3.4 环境变量替换3.5 docker构建忽略文件3.6 Shell 和 exec 格式Exec 格式Shell 格式使用不同的 shell 3.7 FROM指令了解ARG和FROM如何交互 3.8 RUN指令RUN指令缓存失效RUN …

Win11右键菜单定制

0.优化目标 优化成&#xff1a;右键菜单优化成全量菜单选项&#xff0c;并精简掉我不需要的菜单选项。 具体优化步骤&#xff1a; 1.win11菜单恢复到win10经典状态 win11右键菜单是缩水版的&#xff0c;需要再次点击“显示更多选项”才能找到自己想用到的选项&#xff0c;再…

python学生作业管理系统flask-django-nodejs-php

课题主要分为三大模块&#xff1a;即管理员模块和学生、教师模块&#xff0c;主要功能包括&#xff1a;学生、教师、作业信息、学习模块、教学评价、学习情况等&#xff1b; 关键词&#xff1a;学生作业管理系统&#xff1b;作业信息 目录 摘 要 I Abstrac II 目录 III 1绪论 1…

VSCode使用MSVC编译器

1.其他大佬的配置&#xff1a;下载和安装库环境 2.安装好C/C插件<选择1.8.4的版本最好>。 3.分别生成对应的默认模板即可。但是其中参数可能需要配置。 task.json {"version": "2.0.0","tasks": [{"type": "cppbuild"…