组件基座、命令与辅助交互
把组件源码、无头行为、通知、命令面板、轮播、快捷键和日期输入接到真实任务。
组件基座承载什么责任
完整组件库提供较多默认视觉与行为,无头库提供交互、状态和可访问接口,复制源码的组件方案把维护责任交给项目。shadcn/ui、Ant Design、Mantine、Base UI、Radix、React Aria 和 Ark UI 的组合方式不同,采用时辨认实际生成或安装了哪些来源。
组件声明支持键盘或 ARIA,还要检查项目是否保留了必要 props、ref、标签和焦点逻辑。自己重写视觉时,可能丢掉状态和行为。默认皮肤、语义令牌和项目组件接口应有清楚维护位置,避免多处复制完整规则。
通知与命令
Toast 提供短时结果反馈,Sonner、react-hot-toast、react-toastify 等组织队列和可见时机。需要用户持续处理的错误应保留在对象或输入附近,不能只显示几秒。反馈必须对应真实完成点,重要操作可提供明确恢复入口。
命令面板连接搜索、选择和动作,cmdk、kbar 等提供候选组件能力。把输入焦点、结果选择、快捷键、关闭和动作失败接成完整链。禁用项和无结果有明确状态,命令本身与页面按钮共享受保护业务入口。
快捷键需要 scope、组合键、冲突和输入控件政策。用户在文本框中输入时不要让全局快捷键夺走本来输入,事件监听在卸载时移除。系统与浏览器保留组合可能无法覆盖,显示提示与实际能力保持一致。
命令快捷键的注册也有完整生命周期。cmdk 的 Dialog 受控 open 值接回 React,Command.Input/List/Item 组织输入和结果;实际动作通过 onSelect 接到已存在的业务函数。下面只展示打开面板的键盘入口,面板组件同时提供可点击打开按钮:
import { useEffect, useState } from 'react';
import { Command } from 'cmdk';
export function Commands({ openSettings }: { openSettings: () => void }) {
const [open, setOpen] = useState(false);
useEffect(() => {
function keydown(event: KeyboardEvent) {
if (event.repeat || event.isComposing) return;
const element = event.target instanceof Element ? event.target : null;
if (element?.closest('input, textarea, select, [contenteditable="true"]')) return;
if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') {
event.preventDefault();
setOpen(current => !current);
}
}
document.addEventListener('keydown', keydown);
return () => document.removeEventListener('keydown', keydown);
}, []);
return <>
<button onClick={() => setOpen(true)}>打开命令</button>
<Command.Dialog open={open} onOpenChange={setOpen} label="命令">
<Command.Input placeholder="查找命令" />
<Command.List>
<Command.Empty>没有匹配命令</Command.Empty>
<Command.Item value="settings" onSelect={() => {
setOpen(false); openSettings();
}}>打开设置</Command.Item>
</Command.List>
</Command.Dialog>
</>;
}Dialog 库提供相应焦点行为,项目样式、嵌套弹层和打开动作仍需实际核对。contenteditable、Shadow DOM、平台保留组合键和作用域可能需要更细策略;此例没有观察真实键盘或辅助技术行为。cmdk 组件与 Dialog
轮播与日期输入
Embla、Swiper 等组织滚动和切换,自动播放须提供暂停或相应控制,当前项、焦点和按钮状态一致。离屏内容仍可能含可聚焦元素,应按实际模式处理。动画减少后,切换结果与操作入口仍可取得。
日期选择器提供日历导航,日期范围、格式、语言和可接受区间由业务决定。react-day-picker、react-datepicker 和组件库日期控件各有具体接口,选择“某日”时需区分日历日期和时刻,不能默认把所有输入存成午夜 UTC。
三维内容
three.js 管理场景、相机、几何和渲染,React Three Fiber 将相应对象接到 React,drei 提供辅助能力。纹理、几何、渲染循环和 GPU 资源需要管理;不可见或卸载后仍运行会消耗资源。
三维视图有不同设备、输入和无障碍条件。关键业务信息提供可取得的文字或二维入口,载入失败与能力不足保留降级。归档“三包组合”属于候选接线,本页未运行真实 GPU 或性能检查。
实际采用怎样判断
先列当前任务需要的行为,再选能覆盖它们的基座。比较复制维护、样式冲突、包尺寸、版本兼容、授权和目标设备。不能仅以某个库最后发版日期判断是否已废弃,也不能把官方“可访问”宣传替代真实项目验证。
最后更新于