模仿vuex写了一个简单的状态管理的插件,这样写对吗?

发布于 2022-09-12 23:11:53 字数 1608 浏览 18 评论 0

题目描述

感觉vuex有点臃肿,想自己写一个轻量级的,尝试了一下,可以运行起来,也达到了预期效果,只是感觉有点别扭,不知道这么写对不对。

题目来源及自己的思路

发挥composition API的优势,避免字符串,简化操作。
另外想学习一下怎么做vue的插件。

相关代码

// 模仿Vuex写一个简单的数据、状态、缓存管理

import { install } from "element-plus"
import { reactive, inject } from 'vue'

// VuexDataState
export default {
  store: {
    state: {},
    action: {}
  }, // 状态容器

  // 创建实例
  createVueDataState(info) {
    const _info = {
      global: {
        blogState: {
          aaa: '状态演示'
        }      
      },
      action: {
        setBlogState(state, value) {
          state.blogState.aaa = value
        } 
      }
    }

    this.store.state.blogState = reactive(_info.global.blogState)
    this.store.action.setBlogState = _info.action.setBlogState

    return this
  },

  // 代码里面调用
  useStore() {
    const state = inject('nf-store').state

    const fun = {}
    fun.setBlogState = (aa) => {
      return this.store.action.setBlogState(state, aa)
    }

    fun.setBlogState2 = (aa) => {
      return this.store.action.setBlogState(state, aa)
    }

    console.log('useStore内部的fun:', fun)
    return {
      ...fun
    }

  },

  // 安装插件
  install (app, options) {
    // Plugin code goes here
    console.log('vueds-app', app)
    console.log('vueds-options', options)
    console.log('我的状态', this.store)
    // 注入状态
    app.provide('nf-store', this.store)
    // 模板使用状态
    app.config.globalProperties.$nfstate   = this.store.state

  }
}

你期待的结果是什么?实际看到的错误信息又是什么?

基本就是这样,但是总是感觉怪怪的。

所以想问问各位高手,这么写对不对?

当然功能很简陋,现在只是测试一下想法是否可以实现。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文