useRelation
建立父子组件之间的关联关系,进行数据通信和方法调用,基于 provide
和 inject
实现。
基本用法
在父组件中使用 useChildren
关联子组件:
js
import { ref } from 'vue'
import { useChildren } from '@ryxon/use'
const RELATION_KEY = Symbol('my-relation')
export default {
setup() {
const { linkChildren } = useChildren(RELATION_KEY)
const count = ref(0)
const add = () => {
count.value++
}
// 向子组件提供数据和方法
linkChildren({ add, count })
}
}
在子组件中使用 useParent
获取父组件提供的数据和方法:
js
import { useParent } from '@ryxon/use'
export default {
setup() {
const { parent } = useParent(RELATION_KEY)
// 调用父组件提供的数据和方法
if (parent) {
parent.add()
console.log(parent.count.value) // -> 1
}
}
}
API
类型定义
ts
function useParent<T>(key: string | symbol): {
parent?: T
index?: Ref<number>
}
function useChildren(key: string | symbol): {
children: ComponentPublicInstance[]
linkChildren: (value: any) => void
}
useParent 返回值
参数 | 说明 | 类型 |
---|---|---|
parent | 父组件提供的值 | any |
index | 当前组件在父组件的所有子组件中对应的索引位置 | Ref\<number> |
useChildren 返回值
参数 | 说明 | 类型 |
---|---|---|
children | 子组件列表 | ComponentPublicInstance[] |
linkChildren | 向子组件提供值的方法 | (value: any) => void |