chore(@vant/use): split useRelation

This commit is contained in:
chenjiahan
2020-10-05 10:39:08 +08:00
parent 019b8029cc
commit 5f2de02cc2
3 changed files with 136 additions and 129 deletions
@@ -0,0 +1,42 @@
import {
inject,
computed,
onUnmounted,
getCurrentInstance,
ComponentPublicInstance,
ComponentInternalInstance,
} from 'vue';
type ParentProvide<T> = T & {
link(child: ComponentInternalInstance): void;
unlink(child: ComponentInternalInstance): void;
children: ComponentPublicInstance[];
internalChildren: ComponentInternalInstance[];
};
export function useParent<T>(key: string | symbol) {
const parent = inject<ParentProvide<T> | null>(key, null);
if (parent) {
const instance = getCurrentInstance();
if (instance) {
const { link, unlink, internalChildren, ...rest } = parent;
link(instance);
onUnmounted(() => {
unlink(instance);
});
const index = computed(() => internalChildren.indexOf(instance));
return {
parent: rest,
index,
};
}
}
return {};
}