vuex4的简单使用
安装vuex
cnpm install vuex@next --save
官网地址是 https://vuex.vuejs.org/zh/guide/#%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84-store
vuex中的常用5个模块
vuex模块常见有这几个
1.state 存放数据的
2.getters 相当于计算属性
3.mutations 改变state的值(同步), 在页面中通过store.commit('updateMenus', '值') 触发 mutations中的方法。进而更改state中的数据
4.actions 异步操作,在页面中通过 store.dispatch('setTestName')来触发actions 中的方法。在actions中通过 commit('updateTestName', '我是张三')来修改state 中的值
5.modules 模块,内容较多的时候,可以进行模块的拆分
ps:改变state中的数据,无论是同步还是异步。只能够通过mutations 中的方法去更改。不可以直接通过srore.state这样的方式去更改。
简单使用vuex store/index.ts文件
在src下创建store文夹,在store文夹下创建index.ts.
import { createStore } from 'vuex'
const store = createStore({
state() {
return {
// 通过存在localStorage中避免刷新的时候数据丢失
menus: localStorage.getItem('menus') ? localStorage.getItem('menu') : [],
testName: localStorage.getItem('testName') ? localStorage.getItem('testName') : '',
}
},
getters: {
// 计算属性
get_testName(state) {
return state.testName
}
},
mutations: {
updateMenus(state, menu) {
// @ts-ignore
localStorage.setItem('menus',JSON.stringify(menu))
state.menus=menu
},
updateTestName(state, testName) {
// @ts-ignore
localStorage.setItem('testName',testName)
state.testName=testName
}
},
actions: {
// 调用
setTestName({ commit }) {
return new Promise((resolve, reject) => {
// 模拟的一个请求,通过commit触发mutations中的 updateMenus
setTimeout(() => {
commit('updateTestName', '我是张三')
// 成功resolve返回数据
resolve('我是张三')
}, 1000);
})
}
},
modules:{}
})
export default store
在main.ts中注册
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import { initRouter } from './router/index'
import store from './store/index' //新增
let app=createApp(App)
initRouter(app)
app.mount('#app')
app.use(store) //新增
3种获取值的形式
<template>
<div>
后台首页
<p>第1种:方式获取store.state点的形式:姓名-{{ shwoName1 }}</p>
<p>第2种:getters也没有跟新:姓名-{{ shwoName2 }}</p>
<p>第3种:computed跟新:姓名-{{ shwoName3 }}</p>
<el-button @click="handler">跟新了值</el-button>
</div>
</template>
<script setup lang="ts">
import { computed } from '@vue/runtime-core'
import { useStore } from 'vuex'
let store = useStore()
// 第1种:store.state点的形式
let shwoName1 = store.state.testName
// 第2种:getters也没有跟新
let shwoName2 = store.getters.get_testName
// 第3种:computed跟新
let shwoName3 = computed(() => {
// return store.state.testName 或者如下
return store.getters.get_testName
})
const handler = () => {
store.dispatch('setTestName').then(res => {
console.log('返回来的值',res)
})
}
</script>
我推荐第三种方式computed去获取值
因为前面这两种只会执行一次。如果设置testName的值是一个异步操作。
肯定就获取不到最新的值了。
vuex4的简单使用的更多相关文章
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- 简单粗暴地理解js原型链--js面向对象编程
原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...
随机推荐
- 乐高式扩展:在Seal软件供应链防火墙中轻松集成代码规范工具
上个月,Seal 软件供应链防火墙 v0.2(以下简称"Seal")正式发布,这一版本实现了可扩展架构,用户可以根据自身需求插件式集成原生或第三方解决方案,灵活扩展扫描能力. 在前 ...
- SpringBoot 自定义初始化任务 Runner
在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.可以通过实现Runner接口完成以上工作. 两者只是参数上的区别 方式一 实现 CommandLineRunner 接口 ...
- pytest+request+allure生成测试报告
基本流程 模拟数据 url,paras,method,except http://www.baidu.com, {k=12}, get, 200 请求url (接口文档) 参数 请求方法 预期返回响应 ...
- Hugging News 年度特刊: Transformers & Gradio 年终大事件总结
Transformers 年终大事件总结 对于 Transformers 来说,这是激动人心的一年.2022 年,我们的每周活跃用户数量增加了两倍,最近的一周用户超过 100 万,平均每日 pip 安 ...
- CO02生产订单新增组件
"-----------------------------------------@斌将军-------------------------------------------- LOOP ...
- 【JAVA基础】时间处理
#时间处理 ##查询前台报表运单数据集 @ApiOperation(value = "查询前台报表运单数据集") @Permission(permissionPublic = tr ...
- 【C++开源库】Windows 下编译 libcurl 库
亲测可用: https://codeantenna.com/a/pJaN3omqjp What is libcurl ? libcurl 是一个跨平台的网络协议库,支持 http, https, ft ...
- redis管道技术pipeline一 ——api
import java.io.UnsupportedEncodingException; import java.util.Set; import org.springframework.beans. ...
- 如何在编码阶段减少代码中的bug?
前言 作为一名合格的程序员,不写bug是不可能的.如何花费最少的时间来修复bug呢? 在编码阶段借助一些静态分析工具往往可以事半功倍,减少代码中的bug. 静态分析工具能够在代码未运行的情况下分析源代 ...
- Invalid options object. Sass Loader has been initialized using an options obj
https://blog.csdn.net/liwan09/article/details/106981239