Reka UI 徽标Reka
backdrop
指南

迁移 - Radix Vue 到 Reka UI

本指南为将项目从 Radix Vue 迁移到 Reka UI 的开发者提供了分步说明。

安装

首先,你需要安装最新版的 reka-ui

sh
$ npm add reka-ui

恭喜!🎉 既然你已经安装了上述包,让我们开始迁移吧!前2个步骤相对简单。只需对以下更改进行全局搜索和替换。

导入语句更改

导入的主要变化是将 radix-vue 替换为 reka-ui

vue
<script setup lang="ts">
import { TooltipPortal, TooltipRoot, TooltipTrigger } from 'radix-vue'
import { TooltipPortal, TooltipRoot, TooltipTrigger } from 'reka-ui'
</script>

命名约定更改

CSS 变量和数据属性名称已更新,使用 reka 前缀代替 radix

css
  --radix-accordion-content-width: 300px; 
  --reka-accordion-content-width: 300px; 

  [data-radix-collection-item] {} 
  [data-reka-collection-item] {} 

组件重大更改

Combobox

Arrow

表单组件

vue
<template>
  <CheckboxRoot v-model:checked="value" /> 
  <CheckboxRoot v-model="value" /> 
</template>
  • 与表单组件的更改类似,绑定 CheckboxItem 的 API 已从 v-model:checked 更改为 v-model
vue
<template>
  <DropdownMenuCheckboxItem v-model:checked="value" /> 
  <DropdownMenuCheckboxItem v-model="value" /> 

  <DropdownMenuCheckboxItem checked /> 
  <DropdownMenuCheckboxItem :model-value="true" /> 
</template>

分页

日历

  • 移除已弃用的 step prop - 使用 prevPage/nextPage prop 以获得更大的控制。

    vue
    <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>

Select

Presence

为了更好地支持 SSR 内容,我们还修改了使用 Presence 的组件中 forceMount 的逻辑。

  • 折叠面板
  • 可折叠
  • 选项卡
  • NavigationMenu

forceMount 现在将渲染组件 即使状态处于非活动状态。现在你需要手动处理组件的可见性逻辑。

vue
<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,你需要更新你的模块导入。

ts
// nuxt.config.ts
export default defineNuxtConfig({
 modules: [
   'radix-vue/nuxt' <!-- [!code --] -->
   'reka-ui/nuxt' <!-- [!code ++] -->
 ],
})