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用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论