vue3中getCurrentInstance不推荐使用以及在<script setup>中获取全局内容(三种方式)
warning:
这篇文章距离上次修改已过184天,其中的内容可能已经有所变动。
在Vue 3中,getCurrentInstance
方法不再被推荐使用,因为它打破了Vue作为框架的封装性原则。它允许访问组件实例的内部属性,这可能会导致难以维护和难以预见的问题。
在 <script setup>
中,你不能直接使用 getCurrentInstance
,因为这个脚本设置的组件是预设的,并且默认不提供 setup
函数的访问权限。
但是,你可以通过以下三种方式来获取全局内容:
- 使用
provide
和inject
组合。 - 使用 Vuex 或 Pinia 等状态管理库。
- 使用全局事件总线或者全局状态管理。
以下是使用 provide
和 inject
的示例:
<!-- 全局提供者 -->
<script setup>
import { provide } from 'vue';
provide('globalData', {
message: 'Hello, Vue 3!'
});
</script>
<!-- 消费者 -->
<script setup>
import { inject } from 'vue';
const globalData = inject('globalData');
console.log(globalData.message); // 输出: Hello, Vue 3!
</script>
使用 Vuex 或 Pinia 的示例:
<script setup>
import { useStore } from 'vuex';
const store = useStore();
console.log(store.state.globalMessage); // 输出存储的全局信息
</script>
使用全局事件总线的示例:
// main.js 或其他入口文件
const bus = new Vue();
// 发送事件
bus.$emit('globalEvent', data);
// 监听事件
bus.$on('globalEvent', (data) => {
console.log(data);
});
总结,推荐使用Vue提供的官方API来管理全局状态,而不是依赖 getCurrentInstance
。
评论已关闭