封装一个hook,在Vue3 setup中使用Vuex中的mapState,mapGetters
在Vue3中没有很好的方法使用Vuex中的映射函数到setup中使用,一般就使用一种效率低一些的方法
setup(props, context) {const store = useStore();const name = computed(() => store.state.name);const age = computed(() => store.state.age);return {store,name,age};}
如果在setup中使用mapState映射函数将是以下效果
setup(props, context) {const store = useStore();const storestate = mapState(["name", "age"]);return {store,...storestate,};},
返回值是一个函数,页面也是呈现的是这个函数对象
我通过封装一个hook来解决这个问题
import { computed } from 'vue'
import { mapState, useStore } from 'vuex'export function useState(mapper) {// 拿到store独享const store = useStore()//此时得到的一个键值对的对象,对象的值是一个函数const StateFns = mapState(mapper)// 将数据绑定到对象中const storeState = {}Object.keys(StateFns).forEach(Key => {//需要注意的是这里需要帮函数显示绑定this,因为在setup中是没有绑定this的const fn = StateFns[Key].bind({$store: store})storeState[Key] = computed(fn)})return storeState
}
使用就直接导入hook
import { useState } from '../hooks/useState'export default {setup() {const storeState = useState([ "name", "age"])return {...storeState}}}
mapGetters的hook封装也同mapState的hooke差不多
import { computed } from 'vue'
import { mapGetters, useStore } from 'vuex'export function useGetters(mapper) {// 拿到store独享const store = useStore()const StateFns = mapGetters(mapper)// 对数据进行转换const storeState = {}Object.keys(StateFns).forEach(Key => {const fn = StateFns[Key].bind({$store: store})storeState[Key] = computed(fn)})return storeState
}
使用
import { useGetters } from '../hooks/useGetters'export default {setup() {const storeGetters = useGetters(["nameInfo", "ageInfo", "heightInfo"])return {...storeGetters}}}
封装一个hook,在Vue3 setup中使用Vuex中的mapState,mapGetters相关推荐
- vue3中修改vuex中state中的数据
vue3中修改vuex中state中的数据 1.直接通过store.state修改 如 : //vuex文件 import { createStore } from 'vuex' export def ...
- 封装一个uniapp的全局弹窗组件,vue中也可以使用,在任何页面都可以弹出
效果图: 场景: 当你对接websocket时,或者轮询也好,你需要获取到最新的信息,并且在任何页面弹出一个组件进行后续操作 思路: 1.先封装好要弹出的公共组件 2.向vue原型上挂载全局方法,拿到 ...
- 四十二、开始Vuex的学习:如何在Vue中使用Vuex
@Author:Runsen @Date:2020/7/12 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- Vue3VideoPlay+vue3+ts封装一个视频播放组件
vue3+ts封装一个视频播放组件 基于Vue3VideoPlay 做了常用的配置,复制即用! 官方文档https://codelife.cc/vue3-video-play/ 安装 npm安装: n ...
- vue3+ts+element封装一个简易的curd
vue3+ts+element封装一个简易的curd 闲来无趣做一个简单的table封装,不喜勿喷 首先创建一个公共的Table.vue/pagination.vue文件 Table.vue < ...
- 基于Vue3封装一个好用的Websocket
在Vue3中使用Websocket可以让我们轻松地实现实时数据传输.为了方便使用,我们可以封装一个好用的Websocket类. 安装依赖 首先我们需要安装 ws 库来处理Websocket连接,使用以 ...
- 封装一个方法,找出数组中重复数大于n的元素集合
例如 [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4],封装一个数组原型上的方法,方法返回 重复数目大于2 的子元素集合,结果为[1, 2, 3] 初看并不难,循环一下就可以搞 ...
- vue自定义插件 封装一个类似 element 中 message 消息提示框的插件
vue自定义插件 封装一个类似 element 中 message 消息提示框的插件 一.资源文档 1.vue内置组件 transition 2.Vue.use() 3.Vue.extend() 4. ...
- vue3 + antd + typeScript 封装一个高仿的ProTable
前言 阿里的antd组件说实话真的非常完善了,可是vue版的寥寥无几,vue3的更少了,今天有空就封装一个高仿的ProTable 开始 其实很简单的,我们是基于vue版的antd进行二次封装,我们把表 ...
最新文章
- MIT人工突触芯片新突破:指甲大小的芯片有望媲美超算
- 居然有人撸了一个网易云音乐云村,高手在民间!
- 查询已安装rpm包信息
- 代码编辑器揭露性格,你是哪一种?
- 儿童的身高标准对照表_2020“儿童身高标准”出炉,10岁身高140,你家娃达标吗...
- setGeometry: Unable to set geometry 493x379+674+326 (frame: 517x443+662+274) on QWidgetWindow/“Dialo
- python发动机曲轴连杆动力学计算
- eplan安装提示没有安装许可语言_CAD和EPLAN!电气制图你会选择哪个?
- PHP PDO(mysql) 封装类
- legend2---开发日志4(常用的链接传值方式有哪些)
- 微型计算机的软件系统分成,会计电算化辅导:微型计算机软件系统
- Qualcomm MSM8937 dual DSI 笔记
- php把数据存到cookie,php – 在cookie中存储数组
- 深入理解color model(颜色模型)
- excel 文件加密
- verilog语言实现FPGA板的交通信号灯
- 【Cilium 1.10 重磅发布!】支持 Wireguard, BGP, Egress IP 网关, XDP 负载均衡, 阿里云集成
- C 时间库 time.h 获取当前时间
- Office基础操作:Word 使用交叉引用的超链接后,如何一步操作返回至引用处
- 遥感影像分类算法C++实现(一)
热门文章
- java 数组类型定义_java定义数组的三种类型总结
- python识别人脸多种属性_用Python识别人脸,人种等各种信息
- 字符串相似性的几种度量方法
- 野火指南者stm32开发板|仿真模拟器配置出现的问题|基于keil5
- 也来“玩”Metro UI之磁贴(二)
- ssiOS应用架构谈 本地持久化方案及动态部署
- IDEA(jetbrain通用)优雅级使用教程
- android recyclerview 水平,使用RecyclerView实现水平列表
- Header背景处理方案
- vue 项目运行报错 multiple chunks emit assts to the same filename js/401.js(chunks 401 and 401)