vue3-组件中使用setup函数获取vuex中的数据的新方式

传统方式

setup() {
    const store = useStore()
    //传统方式
    const aName = computed(() => store.state.name)
    return {
          aName
    }

如果数据多一点一个一个导入就十分的不方便

我们可以使用这样一种方法

复制代码
setup() {
    const store = useStore()
  
    //如果想一次拿到想要的数据
    const storeStateFns = mapState(["counter", "name"])
    //console.log(storeState[1]);
    //这里的storeState展开后的"counter","name"其实是一个一个的函数,counter:function(){}
    //使用computed对其进行解构

    //name:function(){},键值对函数,拿到key(name)
    //Object.keys()返回的是一个数组类型
    const storeState={}
    Object.keys(storeStateFns).forEach(fnKey=>{
     //绑定store,setup中没有this
      const fn  = storeStateFns[fnKey].bind({$store:store});
      //computed生成ref
      storeState[fnKey] = computed(fn)
    })
    return {
      ...storeState
    }

  }
复制代码

将其封装成单个js文件的模块

复制代码
// default导出的函数在引用时不需要大括号
import {computed} from "vue";
import {mapState, useStore} from "vuex";

//注意这里的mapper是一个数组或对象,因为mapState可以解析数组和对象
export default function useState(mapper) {
    //拿到store独享
    const store = useStore()

    //获取到对应的functions:{name: function() {},counter: function() {}}
    const storeStateFns = mapState(mapper)

    //对数据进行转换
    const storeState = {}
    Object.keys(storeStateFns).forEach(fnKey => {
        const fn = storeStateFns[fnKey].bind({$store: store});
        storeState[fnKey] = computed(fn)
    })
    return storeState
}
复制代码

 

posted @   李白lib  阅读(2927)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示