迁移
本指南提供了开发者将其项目从 Radix Vue 迁移到 Reka UI 的分步说明。
安装
首先,您需要安装最新的 reka-ui。
npm add reka-ui
pnpm add reka-ui
yarn add reka-ui
bun add reka-ui
恭喜!🎉 现在您已经安装了上述软件包,让我们开始迁移吧!前两步相对简单。只需对以下更改进行全局搜索和替换即可。
导入语句更改
导入的主要更改是将 radix-vue 替换为 reka-ui。
<script setup lang="ts">
- import { TooltipPortal, TooltipRoot, TooltipTrigger } from 'radix-vue'
+ import { TooltipPortal, TooltipRoot, TooltipTrigger } from 'reka-ui'
</script>
命名约定更改
CSS 变量和数据属性名称已更新为使用 reka 前缀而不是 radix。
- --radix-accordion-content-width: 300px;
+ --reka-accordion-content-width: 300px;
- [data-radix-collection-item] {}
+ [data-reka-collection-item] {}
组件破坏性更改
Combobox
- 移除
filter-functionprops -Combobox已重构和改进以支持更好的自定义过滤。阅读更多。
<template>
- <ComboboxRoot :filter-function="customFilter" />
</template>
- 将 Root 的
searchTermprops 替换为 Input 的v-model - 将
displayValueprops 从 Root 移动到 Input
<template>
- <ComboboxRoot v-model:search-term="search" :display-value="(v) => v.name" />
<ComboboxRoot>
+ <ComboboxInput v-model="search" :display-value="(v) => v.name" />
</ComboboxRoot>
</template>
Arrow
- 改进箭头多边形 - 更改 svg 多边形以允许更好的样式。
表单组件
- 将受控状态重命名为
v-model- 将v-model:checked、v-model:pressed替换为表单组件更熟悉的 API。
<template>
- <CheckboxRoot v-model:checked="value" />
+ <CheckboxRoot v-model="value" />
</template>
- 重新定位
VisuallyHidden- 以前,VisuallyHidden定位在根节点,导致样式作用域无法应用。
菜单复选框项
与表单组件的更改类似,绑定 CheckboxItem 的 API 已从 v-model:checked 更改为 v-model。
<template>
- <DropdownMenuCheckboxItem v-model:checked="value" />
+ <DropdownMenuCheckboxItem v-model="value" />
- <DropdownMenuCheckboxItem checked />
+ <DropdownMenuCheckboxItem :model-value="true" />
</template>
分页
- 必需的
itemsPerPageprop - 现在要求提供itemsPerPageprop,而不是默认值,以便更明确地提示页面大小。
<template>
+ <PaginationRoot :items-per-page="10" />
</template>
日历
- 移除已废弃的
stepprop - 使用prevPage/nextPageprops 进行更精细的控制。
<script setup lang="ts">
+ function pagingFunc(date: DateValue, sign: -1 | 1) {
+ if (sign === -1)
+ return date.subtract({ years: 1 })
+ return date.add({ years: 1 })
+}
</script>
<template>
- <CalendarPrev step="year" />
+ <CalendarPrev :prev-page="(date: DateValue) => pagingFunc(date, -1)" />
- <CalendarNext step="year" />
+ <CalendarNext :next-page="(date: DateValue) => pagingFunc(date, 1)" />
</template>
选择
SelectValue不再渲染传送元素 -SelectValue以前的实现将通过传送片段渲染选定的SelectItem。这会导致 SSR 闪烁,并且是不必要的计算。
<template>
<SelectValue>
+ <!-- render the content similar to `SelectItem` -->
</SelectValue>
</template>
Presence
为了更好地支持 SSR 内容,我们还修改了围绕使用 forceMount 的组件的逻辑,这些组件使用了 Presence:
- Accordion
- Collapsible
- Tabs
- NavigationMenu
forceMount 现在即使在状态不活动时也会渲染组件。您现在需要手动处理组件的可见性逻辑。
<template>
<TabsRoot
v-slot="{ modelValue }"
default-value="tab1"
>
<TabsContent
value="tab1"
force-mount
:hidden="modelValue !== 'tab1'"
>
…
</TabsContent>
<TabsContent
value="tab2"
force-mount
:hidden="modelValue !== 'tab2'"
>
…
</TabsContent>
</TabsRoot>
</template>
对于 Nuxt 模块用户
如果您正在使用 Nuxt,您需要更新您的模块导入。
// nuxt.config.ts
export default defineNuxtConfig({
modules: [
- 'radix-vue/nuxt',
+ 'reka-ui/nuxt'
],
})