注入上下文
利用 injectContext
来增强 Reka UI 中的组件组合,从而实现强大而灵活的 UI 开发。
请谨慎使用!API 可能会更改
Reka UI 暴露了内部的 injectContext
以进一步扩展组合和构建复杂组件的能力。然而,此 API 主要设计用于内部使用。因此,API 可能会在不另行通知的情况下更改。
injectContext
简介
在 Reka UI 中,所有根组件以及一些其他组件都导出一个 injectContext
函数,这是管理组件状态和实现无缝组合的关键功能。本指南将向您展示如何基于所提供的上下文创建自己的子组件。
injectContext
是什么?
injectContext
是每个 Reka UI 组件提供的一个函数,它允许您访问该组件的内部状态和方法。
它利用了 Vue 的 Provide / Inject 来提供一种强大的方式来扩展和自定义组件行为。
基本用法
这里有一个简单的示例,说明如何在 Reka UI Accordion 组件中使用 injectContext
。
vue
<!-- CustomAccordionContent.vue -->
<script setup>
import { injectAccordionItemContext, injectAccordionRootContext } from 'reka-ui'
const accordionRootContext = injectAccordionRootContext()
const accordionItemContext = injectAccordionItemContext()
const isSingleOpen = computed(() =>
accordionRootContext.isSingle.value && accordionItemContext.open.value
)
</script>
<template>
<div>
…
</div>
</template>
常见用例
- 自定义样式:访问内部状态,根据组件状态应用动态样式。
- 扩展功能:在现有组件逻辑之上构建,以添加新功能。
- 复杂布局:通过组合多个组件并在它们之间共享状态来创建复杂的 UI 模式。
- 可访问性增强:利用内部方法和状态来改善键盘导航或屏幕阅读器支持。
最佳实践
- 在子组件或组合式函数中使用
injectContext
,而不是在组件本身中。 - 在使用注入的上下文之前,务必检查它是否存在,因为它在组件范围之外使用时可能为
undefined
。 - 在可能的情况下,优先使用提供的 props 和事件,并将
injectContext
用于更高级的场景。 - 使用 TypeScript 时,利用
injectContext
提供的类型信息,以提高代码质量。