Vue3中的createGlobalState用法及示例详解

 更新时间:2024年10月31日 09:20:40   作者:码农研究僧  
createGlobalState 是 Vue 3 中一种管理全局状态的简便方式,通常用于管理多个组件间共享的状态,由 @vueuse/core 提供的,允许创建一个响应式的全局状态,本文给大家介绍了Vue3中的createGlobalState用法及示例,需要的朋友可以参考下

1. 基本知识

createGlobalState 是 Vue 3 中一种管理全局状态的简便方式,通常用于管理多个组件间共享的状态

由 @vueuse/core 提供的,允许创建一个响应式的全局状态,可以在任意组件中访问和更新

基本的特性如下:

  • 响应式:状态是响应式的,任何组件对状态的访问和修改都会触发相应的更新
  • 简单易用:通过简单的 API 可以创建和管理全局状态
  • 模块化:可以根据需要将状态逻辑分离到不同的模块中
特性有 createGlobalState没有 createGlobalState
全局状态管理方便、简单复杂,通常需要手动管理状态传递
响应式自动响应式更新需要使用 Vuex 或 EventBus 等手动实现
代码可读性更清晰、更简洁代码可能更加混乱
模块化可以方便地组织全局状态通常需要复杂的状态管理逻辑

需要确保安装了 @vueuse/core:

2. Demo

一般与 useStorage 一起存储在 localStorage 中比较好,否则刷新网页链接的时候会丢失的!

以下是没有存储到localStorage的Demo

相关的Demo如下:

src/globalState.js,定义全局状态:

// src/globalState.js
import { createGlobalState } from '@vueuse/core';
import { reactive } from 'vue';

// 创建全局状态
export const useGlobalState = createGlobalState(() => {
  return reactive({
    count: 0
  });
});

MyDemoComponent.vue 中使用全局状态:

<template>
  <div>
    <h2>全局计数器</h2>
    <p>当前计数: {{ globalState.count }}</p>
    <button @click="increment">增加计数</button>
  </div>
</template>

<script>
import { useGlobalState } from '../globalState';

export default {
  setup() {
    const globalState = useGlobalState();

    const increment = () => {
      globalState.count++;
    };

    return {
      globalState,
      increment
    };
  }
};
</script>

确保在 App.vue 中使用新的组件:

<template>
  <div id="app">
    <MyDemoComponent />
  </div>
</template>

<script>
import MyDemoComponent from './components/MyDemoComponent.vue';

export default {
  components: {
    MyDemoComponent
  }
};
</script>

最终截图如下:

也给一版没有使用的Demo:

可能会使用一个简单的 EventBus 或 Vuex 来管理全局状态,示例可能如下:

// src/eventBus.js
import { reactive } from 'vue';
import { createApp } from 'vue';

const state = reactive({
  count: 0
});

const eventBus = createApp({});

export const useEventBus = () => {
  return {
    state,
    increment: () => {
      state.count++;
      eventBus.config.globalProperties.$emit('update');
    }
  };
};

在 MyDemoComponent.vue 中:

<template>
  <div>
    <h2>全局计数器</h2>
    <p>当前计数: {{ eventBus.state.count }}</p>
    <button @click="increment">增加计数</button>
  </div>
</template>

<script>
import { useEventBus } from '../eventBus';

export default {
  setup() {
    const eventBus = useEventBus();

    return {
      eventBus,
      increment: eventBus.increment
    };
  }
};
</script>

到此这篇关于Vue3中的createGlobalState用法及示例详解的文章就介绍到这了,更多相关Vue3 createGlobalState用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue异步更新机制及$nextTick原理的深入讲解

    Vue异步更新机制及$nextTick原理的深入讲解

    最近在学习一些底层方面的知识,所以想做个系列尝试去聊聊这些比较复杂又很重要的知识点,下面这篇文章主要给大家介绍了关于Vue异步更新机制及$nextTick原理的相关资料,需要的朋友可以参考下
    2022-04-04
  • Vue.js响应式数据的简单实现方法(一看就会)

    Vue.js响应式数据的简单实现方法(一看就会)

    Vue最巧妙的特性之一是其响应式系统,下面这篇文章主要给大家介绍了关于Vue.js响应式数据的简单实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 使用vue-cli导入Element UI组件的方法

    使用vue-cli导入Element UI组件的方法

    这篇文章给大家介绍了使用vue-cli导入Element UI组件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友一起看看吧
    2018-05-05
  • vue+three.js实现炫酷的3D登陆页面示例详解

    vue+three.js实现炫酷的3D登陆页面示例详解

    这篇文章主要为大家介绍了vue+three.js实现炫酷的3D登陆页面示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Axios在vue项目中的封装步骤

    Axios在vue项目中的封装步骤

    Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js,是一个第三方插件,第三方异步请求工具库,这篇文章主要介绍了Axios在vue项目中的封装方法,需要的朋友可以参考下
    2022-10-10
  • vue2结合echarts实现一个地图的效果

    vue2结合echarts实现一个地图的效果

    这篇文章主要介绍了vue2结合echarts实现一个地图的效果,本文通过实例代码给大家介绍的非常详细,对大家何用vue和echarts实现一个地图有一定的帮助,感兴趣的朋友一起看看吧
    2024-03-03
  • Vue3+ElementUI 多选框中复选框和名字点击方法效果分离方法

    Vue3+ElementUI 多选框中复选框和名字点击方法效果分离方法

    这篇文章主要介绍了Vue3+ElementUI 多选框中复选框和名字点击方法效果分离方法,文中补充介绍了VUE-Element组件 CheckBox多选框使用方法,需要的朋友可以参考下
    2024-01-01
  • vue-cli3 取消eslint校验代码的解决办法

    vue-cli3 取消eslint校验代码的解决办法

    这篇文章主要介绍了vue-cli3 取消eslint校验代码的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • vue实现可改变购物数量的购物车

    vue实现可改变购物数量的购物车

    这篇文章主要为大家详细介绍了vue实现可改变购物数量的购物车,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • vue3 v-bind="$attrs"继承组件全部属性的解决方案

    vue3 v-bind="$attrs"继承组件全部属性的解决方案

    这篇文章主要介绍了vue3 v-bind=“$attrs“ 继承组件全部属性的解决方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06

最新评论