react▌
lobehub/lobe-chat · updated Apr 8, 2026
If unsure about component usage, search existing code in this project. Most components extend antd with additional props.
React Component Writing Guide
- Use antd-style for complex styles; for simple cases, use inline
styleattribute - Use
FlexboxandCenterfrom@lobehub/uifor layouts (seereferences/layout-kit.md) - Component priority:
src/components>@lobehub/ui/base-ui>@lobehub/ui> custom implementation- Always prefer
@lobehub/ui/base-uiprimitives (Select, Modal, DropdownMenu, Popover, Switch, ScrollArea…) over antd equivalents - Fall back to
@lobehub/uihigher-level components when base-ui has no match - Only implement a custom component as a last resort — never reach for antd directly
- Always prefer
- Use selectors to access zustand store data
@lobehub/ui Components
If unsure about component usage, search existing code in this project. Most components extend antd with additional props.
Reference: node_modules/@lobehub/ui/es/index.mjs for all available components.
Common Components:
- General: ActionIcon, ActionIconGroup, Block, Button, Icon
- Data Display: Avatar, Collapse, Empty, Highlighter, Markdown, Tag, Tooltip
- Data Entry: CodeEditor, CopyButton, EditableText, Form, FormModal, Input, SearchBar, Select
- Feedback: Alert, Drawer, Modal
- Layout: Center, DraggablePanel, Flexbox, Grid, Header, MaskShadow
- Navigation: Burger, Dropdown, Menu, SideNav, Tabs
Routing Architecture
Hybrid routing: Next.js App Router (static pages) + React Router DOM (main SPA).
| Route Type | Use Case | Implementation |
|---|---|---|
| Next.js App Router | Auth pages (login, signup, oauth) | src/app/[variants]/(auth)/ |
| React Router DOM | Main SPA (chat, settings) | desktopRouter.config.tsx + desktopRouter.config.desktop.tsx (must match) |
Key Files
- Entry:
src/spa/entry.web.tsx(web),src/spa/entry.mobile.tsx,src/spa/entry.desktop.tsx - Desktop router (pair — always edit both when changing routes):
src/spa/router/desktopRouter.config.tsx(dynamic imports) andsrc/spa/router/desktopRouter.config.desktop.tsx(sync imports). Drift can cause unregistered routes / blank screen. - Mobile router:
src/spa/router/mobileRouter.config.tsx - Router utilities:
src/utils/router.tsx
.desktop.{ts,tsx} File Sync Rule
CRITICAL: Some files have a .desktop.ts(x) variant that Electron uses instead of the base file. When editing a base file, always check if a .desktop counterpart exists and update it in sync. Drift causes blank pages or missing features in Electron.
Known pairs that must stay in sync:
| Base file (web, dynamic imports) | Desktop file (Electron, sync imports) |
|---|---|
src/spa/router/desktopRouter.config.tsx |
src/spa/router/desktopRouter.config.desktop.tsx |
src/routes/(main)/settings/features/componentMap.ts |
src/routes/(main)/settings/features/componentMap.desktop.ts |
How to check: After editing any .ts / .tsx file, run Glob for <filename>.desktop.{ts,tsx} in the same directory. If a match exists, update it with the equivalent sync-import change.
Router Utilities
import { dynamicElement, redirectElement, ErrorBoundary } from '@/utils/router';
element: dynamicElement(() => import('./chat'), 'Desktop > Chat');
element: redirectElement('/settings/profile');
errorElement: <ErrorBoundary resetPath="/chat" />;
Navigation
Important: For SPA pages, use Link from react-router-dom, NOT next/link.
// ❌ Wrong
import Link from 'next/link';
<Link href="/">Home</Link>;
// ✅ Correct
import { Link } from 'react-router-dom';
<Link to="/">Home</Link>;
// In components
import { useNavigate } from 'react-router-dom';
const navigate = useNavigate();
navigate('/chat');
// From stores
const navigate = useGlobalStore.getState().navigate;
navigate?.('/settings');
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.8★★★★★64 reviews- ★★★★★Valentina Chawla· Dec 24, 2024
Registry listing for react matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Jin Desai· Dec 20, 2024
Keeps context tight: react is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Olivia Chen· Dec 20, 2024
Useful defaults in react — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Aditi Smith· Dec 16, 2024
We added react from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Ganesh Mohane· Dec 4, 2024
Registry listing for react matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Ren Agarwal· Nov 11, 2024
I recommend react for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Valentina Lopez· Nov 7, 2024
react fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- ★★★★★Valentina Haddad· Oct 26, 2024
react is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Mateo Choi· Oct 2, 2024
react reduced setup friction for our internal harness; good balance of opinion and flexibility.
- ★★★★★Piyush G· Sep 21, 2024
Solid pick for teams standardizing on skills: react is focused, and the summary matches what you get after install.
showing 1-10 of 64