useRelation

介绍

建立父子组件之间的关联关系,进行数据通信和方法调用,基于 provideinject 实现。

代码演示

基本用法

在父组件中使用 useChildren 关联子组件:

  1. import { ref } from 'vue';
  2. import { useChildren } from '@vant/use';
  3. const RELATION_KEY = Symbol('my-relation');
  4. export default {
  5. setup() {
  6. const { linkChildren } = useChildren(RELATION_KEY);
  7. const count = ref(0);
  8. const add = () => {
  9. count.value++;
  10. };
  11. // 向子组件提供数据和方法
  12. linkChildren({ add, count });
  13. },
  14. };

在子组件中使用 useParent 获取父组件提供的数据和方法:

  1. import { useParent } from '@vant/use';
  2. export default {
  3. setup() {
  4. const { parent } = useParent(RELATION_KEY);
  5. // 调用父组件提供的数据和方法
  6. if (parent) {
  7. parent.add();
  8. console.log(parent.count.value); // -> 1
  9. }
  10. },
  11. };

API

类型定义

  1. function useParent<T>(key: string | symbol): {
  2. parent?: T;
  3. index?: Ref<number>;
  4. };
  5. function useChildren(key: string | symbol): {
  6. children: ComponentPublicInstance[];
  7. linkChildren: (value: any) => void;
  8. };

useParent 返回值

参数说明类型
parent父组件提供的值any
index当前组件在父组件的所有子组件中对应的索引位置Ref<number>

useChildren 返回值

参数说明类型
children子组件列表ComponentPublicInstance[]
linkChildren向子组件提供值的方法(value: any) => void

useRelation - 图1