vuex如何修改状态state的方法

 更新时间:2024年08月31日 09:44:42   作者:明月松江  
这篇文章主要介绍了vuex如何修改状态state的方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vuex修改状态state方法

vuex想要改变state里的属性,官方推荐的方法是通过mutaion的方式修改state。

例如:

store.js

const state = {
  num:0
}
const mutations = {
  SET_NUM(state, payload) {
    state.num= payload;
  },
}
export default new Vuex.Store({
  state,
  mutations
})
<template>
  ...
</template>
<script>
  export default{
    data(){
      return{
        num:1
      }
    },
    methods:{
	  doSomething(){
	    this.$store.commit('SET_NUM',this.num);
	  }	
	}
  }
</script>

在组件里直接修改state也是生效的,例如:

 doSomething(){
   this.$store.state.num = this.num;
 }	

但是不推荐这种直接修改state的方式,因为这样不能使用vuex的浏览器插件来跟踪状态的变化,不利于调试。

vuex state使用/教程/实例

说明

  • 本文用示例介绍Vuex的五大核心之一:state。

官网

state概述

单一状态树

  • Vuex 使用单一状态树:用一个对象就包含了全部的应用层级状态。它作为一个“唯一数据源。这也意味着,每个应用将仅仅包含一个 store 实例。
  • 单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。
  • 存储在 Vuex 中的数据和 Vue 实例中的 data 遵循相同的规则,例如状态对象必须是纯粹 (plain) 的。

响应式

state存放的数据是响应式的:如果store的数据改变,依赖这个数据的组件也会更新。

用法

直接使用

// 在JS中使用
this.$store.state.变量名        // 不分模块
this.$store.state.模块名.变量名 // 分模块//在模板上使用
$store.state.变量名        // 不分模块
$store.state.模块名.变量名 // 分模块

mapState

import { mapState } from 'vuex'
export default {
    computed: {
        ...mapState(['state属性名'])              // 不分模块,不修改属性名
        ...mapState({'新属性名称':'state属性名'}) // 不分模块,修改属性名
        ...mapState('模块名', ['state属性名'])    // 分模块,不修改属性名
    }
}

示例

代码

CouterStore.js

import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);
const counterStore = new Vuex.Store(
    {
        state: {
            count: 10
        },
    }
);export default counterStore;

Parent.vue

<template>
  <div class="outer">
    <h3>父组件</h3>
    <component-b></component-b>
  </div>
</template><script>
import ComponentB from "./ComponentB";export default {
  name: 'Parent',
  components: {ComponentB},
}
</script><style scoped>
.outer {
  margin: 20px;
  border: 2px solid red;
  padding: 20px;
}
</style>

ComponentB.vue(组件)

<template>
  <div class="container">
    <h3>ComponentB</h3>
    计数器的值:{{thisCount}}
    <!--也可以这么写:-->
    <!--计数器的值:{{this.$store.state.count}}-->
  </div>
</template><script>
export default {
  computed:{
    thisCount() {
      return this.$store.state.count;
    }
  }
}
</script><style scoped>
.container {
  margin: 20px;
  border: 2px solid blue;
  padding: 20px;
}
</style>

路由(router/index.js)

import Vue from 'vue'
import Router from 'vue-router'
import Parent from "../components/Parent";Vue.use(Router)export default new Router({
  routes: [
    {
      path: '/parent',
      name: 'Parent',
      component: Parent,
    }
  ],
})

测试

访问:http://localhost:8080/#/parent

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue二级弹窗关闭错误的解决指南

    Vue二级弹窗关闭错误的解决指南

    本文详细分析了Vue.js项目中二级弹窗关闭时出现的DOM操作错误原因,并提供了多种解决方案,包括确保正确的DOM操作时机、处理过渡动画、管理动态组件和清理异步操作等,通过这些方法,可以有效预防和解决此类问题,提升应用的稳定性和性能,需要的朋友可以参考下
    2026-01-01
  • 解决Vue + Echarts 使用markLine标线(precision精度问题)

    解决Vue + Echarts 使用markLine标线(precision精度问题)

    这篇文章主要介绍了解决Vue + Echarts 使用markLine标线(precision精度问题),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Vue3项目中引入html页面的方法举例

    Vue3项目中引入html页面的方法举例

    这篇文章主要给大家介绍了关于Vue3项目中引入html页面的相关资料,Vue3是一个JavaScript框架,通常我们使用它来构建单页应用程序(SPA),如果你想在HTML页面中使用Vue3,可以参考这篇文章,需要的朋友可以参考下
    2023-09-09
  • vue3使用vuedraggable和grid实现自定义拖拽布局方式

    vue3使用vuedraggable和grid实现自定义拖拽布局方式

    这篇文章主要介绍了vue3使用vuedraggable和grid实现自定义拖拽布局方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Vue项目报错:Uncaught SyntaxError: Unexpected token '<'的解决方法

    Vue项目报错:Uncaught SyntaxError: Unexpected token '<&a

    最近在做vue项目时,需要引入一个第三方的js文件,在index.html中通过以下方式引入JS文件编译后就报了这个问题,这篇文章主要给大家介绍了关于Vue项目报错:Uncaught SyntaxError: Unexpected token '<'的解决方法,需要的朋友可以参考下
    2022-08-08
  • vue中的el-tooltip提示黑框遮挡问题

    vue中的el-tooltip提示黑框遮挡问题

    这篇文章主要介绍了vue中的el-tooltip提示黑框遮挡问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Vue computed实现原理深入讲解

    Vue computed实现原理深入讲解

    computed又被称作计算属性,用于动态的根据某个值或某些值的变化,来产生对应的变化,computed具有缓存性,当无关值变化时,不会引起computed声明值的变化。产生一个新的变量并挂载到vue实例上去
    2022-10-10
  • 快速了解Vue父子组件传值以及父调子方法、子调父方法

    快速了解Vue父子组件传值以及父调子方法、子调父方法

    这篇文章主要介绍了Vue父子组件传值以及父调子方法、子调父方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Vue封装全局toast组件的完整实例

    Vue封装全局toast组件的完整实例

    组件(Component)是 Vue.js 最强大的功能之一,组件可以扩展 HTML 元素,封装可重用的代码,这篇文章主要给大家介绍了关于Vue封装全局toast组件,需要的朋友可以参考下
    2021-07-07
  • Vue中的侦听器及使用场景

    Vue中的侦听器及使用场景

    Vue中的侦听器是一种响应式机制,可以对指定的数据进行监听,并在数据变化时执行相应的回调函数。常用于监听复杂数据类型的变化,如对象和数组。通过侦听器,可以实现数据的自动更新和逻辑处理等功能,提高代码的可读性和可维护性
    2023-05-05

最新评论