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知识库 -> vue3进阶-如何使用vuex -> 正文阅读

[JavaScript知识库]vue3进阶-如何使用vuex

一、首先明白vuex是什么,简单来说:

1、vuex用来创建一个全局唯一的仓库store,来管理全局通用数据。
2、一处修改,全局改变

二、store中的几个基本概念

1、state: 定义全局数据, 例如用户信息
2、getters: 相当于计算属性
3、mutations: 用来同步修改state中的数据,只允许写同步代码,不推荐写异步代码
4、actions: 异步的修改数据,主要是通过commit触发mutation
5、modules: 用来管理各个子模块

三、传统方式使用vuex

举个例子,在state中定义一个用户姓名name, 我们要做的是在页面中使用和修改name.以此为目的我们展开来说:

首先store中定义好name:

// store/index.js
export default createStore({ 
	state: {
		name: 'mily'
	}
})

在页面中我们可以直接通过$store.state.name获取, 也可以通过计算属性computed,比如

// home.vue
<template>
  <div class="home">
    <h1 @click="handleClick">点击修改名字:{{myName}}</h1>
  </div>
</template>

<script>
export default {
  name: 'HomeView',
  computed: {
    myName() {
      return this.$store.state.name
    }
  }
}
</script>

如果我们需要对name作出修改,可以通过dispatch或者commit,这里有两种情况:
1、 如果需要异步修改,需要通过store的dispatch派发一个action来修改;
2、 如果同步修改,可以直接commit一个mutation方法。

打个比方,这里我们使用异步修改的方式:
1-1、首先我们在页面定一个methods, 定义handleClick方法来修改,

// home.vue
	methods: {
	  handleClick() {
	    // 同步修改: this.$store.commit('CHANGE', 'song')
	   	// 异步改变:通过store的dispatch发一个store中定义的action
	    this.$store.dispatch('changeName', 'song')
	  }
	}

1-2、其次,我们也需要在storeaction中定一个changeName的方法, 然后通过commit触发一个mutation; 第一个参数为store, 第二个参数为传递过来的参数

// store/index.js
  changeName(store, params) {
    // 通过commit触发mutation
    setTimeout(() => {
      store.commit('CHANGE', params)
    }, 1000);
  }

1-3、最后,我们在mutations中定义一个CHANGE方法, 第一个参数为state,第二个为传递过来的参数;

// store/index.js
  mutations: {
    CHANGE(state, str) {
      state.name = str;
    }
  }

四、compositon-api中如何使用vuex

<template>
  <div class="about">
    <h1>
      This is an about page 
      <p @click="handleClick">{{name}}</p>
    </h1>
  </div>
</template>

<script>
import { useStore } from 'vuex'; // 1、引入useStore
import { toRefs } from 'vue';
export default {
  setup() {
    const store = useStore(); // 2、创建store对象
    const { name } = toRefs(store.state); // 解构,也可以不解构
    function handleClick() {
      store.dispatch('changeName', 'hello mily') // 3、事件派发
    }
    return {
      name,
      handleClick
    }
  }
}
</script>

小结

  1. 组件中dispatch派发actions中的同名事件
  2. 异步:通过actinos的方法提交commit, 触发mutation事件;
    同步:可以直接提交commit触发mutation
  3. 在mutation中修改state中的数据, 一个地方改变 其他地方也会改变
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:03:56  更:2022-05-24 18:05:44 
 
开发: 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/23 20:44:55-

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