Vue3 中常用的API

1. vue3中的ref、toRef、toRefs

ref: 用于创建一个包装对象,将普通 JavaScript 值转换为响应式对象。通常用于定义组件内部的响应式数据。

js 复制代码
import { ref } from 'vue';
const count = ref(0); // 创建一个包装对象,初始值为 0
console.log(count.value); // 访问响应式数据时需要使用 .value 属性

toRef: 用于创建一个基于响应式对象的引用。当我们需要在组件内将一个响应式对象的属性传递给另一个函数或组件时,可以使用 toRef 创建一个基于响应式对象属性的引用,而不是直接将属性值传递。

js 复制代码
import { toRef } from 'vue';
const state = reactive({ count: 0 });
// 创建一个基于 state.count 的引用
const countRef = toRef(state, 'count');
console.log(countRef.value); // 访问引用的值

toRefs: 用于将一个响应式对象的所有属性转换为引用。通常在组件的 setup 函数中使用,将响应式对象解构为多个引用,方便在模板中使用。

js 复制代码
import { reactive, toRefs } from 'vue';
const state = reactive({ count: 0, name: 'Vue' });
// 将 state 的所有属性转换为引用
const { count, name } = toRefs(state);
console.log(count.value); // 访问引用的值
console.log(name.value); // 访问引用的值

总之,ref 用于创建一个包装对象,将普通值转换为响应式对象;toRef 用于创建一个基于响应式对象的引用;toRefs 用于将一个响应式对象的所有属性转换为引用。

2. provide/inject如何实现跨层传递数据

定义

  • provideinject用来实现组件之间的数据传递,它们更适用跨多个层级的组件传递数据,而不仅仅是父子组件之间的通信。

  • provide:用于提供可以被后代组件注入的值。

  • provideinject 通常成对一起使用,使一个祖先组件作为其后代组件的依赖注入方,无论这个组件的层级有多深都可以注入成功,只要他们处于同一条组件链上。

  • 这个 provide 选项应当是一个对象或是返回一个对象的函数。这个对象包含了可注入其后代组件的属性。

  • inject:用于声明要通过从上层提供方匹配并注入进当前组件的属性。

实现

新建项目 App.js 代码如下:

js 复制代码
import { h, provide, inject } from "vue";

const Provider = {
  name: "provider",
  setup() {
    provide("foo", "fooVal");
    provide("bar", "barVal");
    return {};
  },
  render() {
    return h("div", {}, [h("p", {}, "provider"), h(Consumer)]);
  },
}; 

const Consumer = {
  name: "consumer",
  setup() {
    const foo = inject("foo");
    const bar = inject("bar");
    return {
      foo,
      bar
    };
  },
  render() {
    return h("div", {}, [
      h("p", {}, `consumer:${this.foo} - ${this.bar}`),
    ]);
  },
};

export const App = {
  name: "app",
  render() {
    return h("div", {}, [h("p", {}, "app"), h(Provider)]);
  },
  setup() {
    return {};
  },
};
  • 以上代码,定义了三个组件appprovideconsumer形成一个树状的层级关系。
  • app组件中引用了provide组件。provide组件中注入了foobar,并且引用了consumer组件。
  • consumer组件通过inject获取到foobar,并在组件内部渲染这两个值。
相关推荐
一 乐2 小时前
人口老龄化社区服务与管理平台|基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·人口老龄化社区服务与管理平台
喵个咪3 小时前
基于 Nuxt 4 的现代 Headless CMS 前端:架构深度解析与二次开发指南
前端·vue.js·nuxt.js
he___H6 小时前
B、B+树和vue部分知识
数据结构·vue.js·b树
书中枫叶6 小时前
我用 Vue3 写了一个 Chrome 步骤录制插件:自动截图、本地存储、一键导出教程
前端·vue.js
叶落阁主6 小时前
Vue3 中如何设计一套好用的 Icon 和 IconPicker 组件
前端·vue.js·icon
kungggyoyoyo6 小时前
从0开发一套geo优化软件:数据模型与API设计
前端·vue.js·后端
数据法师7 小时前
Alger Music Player 技术深度解析:基于 Electron + Vue 3 的开源网易云第三方客户端
vue.js·electron·开源
协享科技8 小时前
Vue 3 实现抖音式卡片滑动交互:从零到完整方案
前端·vue.js·交互·ai编程·英语·自考英语
_xaboy8 小时前
开源Vue组件FormCreate通过 JSON 生成TinyVue表单
前端·vue.js·低代码·开源·json·表单设计器
卤蛋fg69 小时前
给 vxe-table 设置全局默认参数:setConfig、setIcon 与 setTheme
vue.js