基于React的UI框架介绍

基于React的主流UI框架全解析 - 含桌面端/移动端选型指南

一、核心需求响应

基于React的主流UI框架,包括桌面端/通用框架移动端框架的定位、核心特点、适用场景,以及基础使用方法,帮助在项目中快速选型并落地。本文将从「通用框架」「企业级框架」「移动端框架」「特色场景框架」四个维度梳理,并补充选型原则和实战示例。

二、React UI框架分类与核心对比

1. 桌面端/通用框架对比

框架名称 核心定位 核心特点 体积/依赖 适用场景 学习成本
Ant Design (antd) 企业级中后台UI ✅ 组件最全(100+)、设计规范统一
✅ 支持React 18/TypeScript
✅ 内置中后台常用功能(表格/表单/权限)
~500KB(按需加载后≈100KB)
无强依赖
中后台系统、企业级应用、管理后台 低(文档完善,API直观)
Material UI (MUI) 谷歌Material Design风格 ✅ 遵循Material Design 3
✅ 高度可定制(主题/样式)
✅ 支持SSR/Next.js
~400KB(按需加载)
依赖emotion/styled-components
海外产品、移动端适配、Material风格应用 中(自定义样式需学习MUI规范)
Chakra UI 轻量灵活的通用UI ✅ 开箱即用的可访问性(a11y)
✅ 原子化样式、响应式设计
✅ 轻量无冗余
~200KB
依赖@chakra-ui/system
创业项目、快速原型、中小型应用 低(API简洁,易扩展)
Tailwind UI 原子化CSS驱动的组件库 ✅ 基于Tailwind CSS,样式无冗余
✅ 高度定制、无样式锁死
✅ 响应式开箱即用
~50KB(核心)+ Tailwind CSS
依赖Tailwind CSS
所有场景(需自定义组件)、追求极致性能 中(需熟悉Tailwind语法)
Element Plus (React版) 轻量通用UI(原Vue Element适配) ✅ 组件简洁、上手快
✅ 中文文档、国内适配
✅ 体积小、性能优
~300KB(按需加载)
无强依赖
中小型项目、快速开发、Vue转React项目 低(Vue开发者易上手)
Mantine 轻量全功能UI ✅ 零配置TypeScript支持
✅ 内置hooks/表单验证
✅ 无样式侵入
~350KB(按需加载)
依赖@mantine/hooks
中小型应用、表单密集型项目 低(API简洁,文档友好)

2. 移动端框架对比

框架名称 核心定位 核心特点 体积/依赖 适用场景 学习成本
React Native (RN) 原生跨平台移动开发 ✅ 一套代码运行iOS/Android
✅ 原生性能、原生组件
✅ 生态完善(第三方库丰富)
~10MB(打包后)
依赖React Native CLI
原生移动应用、高性能需求、需调用原生能力 中高(需学习RN语法和原生桥接)
Ant Design Mobile (antd-mobile) 移动端企业级UI ✅ Ant Design移动端版本
✅ 组件丰富(50+)、设计规范统一
✅ 支持React 18/TypeScript
~300KB(按需加载)
无强依赖
移动端H5、混合应用、企业级移动应用 低(Antd开发者无缝切换)
Taro 多端统一开发框架 ✅ 一套代码运行H5/小程序/React Native
✅ 支持React语法
✅ 京东出品,国内生态完善
~200KB(核心)
依赖Taro CLI
多端项目(H5+小程序+App)、小程序转React 中(需学习Taro规范)
NutUI 京东移动端UI组件库 ✅ 京东出品,国内适配好
✅ 组件丰富、轻量高性能
✅ 支持React/Vue双版本
~250KB(按需加载)
无强依赖
电商类移动应用、国内H5项目 低(文档完善,上手快)
Vant React 轻量移动端UI ✅ 有赞出品,轻量简洁
✅ 组件丰富、性能优
✅ 支持React 18/TypeScript
~200KB(按需加载)
无强依赖
轻量移动应用、快速原型、电商类项目 低(Vue Vant开发者易上手)
React Native Web RN代码转Web ✅ 一套代码运行Web/移动端
✅ 原生RN组件适配
✅ 支持Next.js
~300KB
依赖react-native
跨端项目(Web+App)、RN迁移Web 中高(需熟悉RN语法)
React Native Elements RN通用UI组件库 ✅ RN生态通用组件
✅ 轻量简洁、易扩展
✅ 支持TypeScript
~150KB
依赖react-native
RN通用应用、快速原型、中小型RN项目 低(API简洁)

三、桌面端/通用框架实战用法(快速入门)

1. Ant Design(企业级首选)

核心优势:中后台组件最全,开箱即用,国内生态最好。

步骤1:安装依赖
1
2
3
# 安装核心包(支持React 18+)
npm install antd @ant-design/icons --save
# 若使用TypeScript,无需额外配置(antd内置类型)
步骤2:基础使用(表格+表单示例,中后台高频场景)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import React from 'react';
import { Table, Form, Input, Button, Space, message } from 'antd';
import { SearchOutlined, SaveOutlined } from '@ant-design/icons';

// 模拟表格数据
const tableData = [
{ id: 1, name: '张三', age: 28, department: '研发部' },
{ id: 2, name: '李四', age: 32, department: '产品部' },
];

// 列配置
const columns = [
{ title: '姓名', dataIndex: 'name', key: 'name' },
{ title: '年龄', dataIndex: 'age', key: 'age' },
{ title: '部门', dataIndex: 'department', key: 'department' },
];

const AntdDemo = () => {
// 表单实例
const [form] = Form.useForm();

// 表单提交
const onSubmit = () => {
form.validateFields().then(values => {
message.success(`搜索条件:${JSON.stringify(values)}`);
console.log(values);
});
};

return (
<div style={{ padding: 20 }}>
{/* 搜索表单 */}
<Form form={form} layout="inline" style={{ marginBottom: 20 }}>
<Form.Item name="name" label="姓名">
<Input placeholder="请输入姓名" />
</Form.Item>
<Form.Item name="department" label="部门">
<Input placeholder="请输入部门" />
</Form.Item>
<Form.Item>
<Space>
<Button type="primary" onClick={onSubmit} icon={<SearchOutlined />}>
搜索
</Button>
<Button icon={<SaveOutlined />}>保存</Button>
</Space>
</Form.Item>
</Form>

{/* 数据表格 */}
<Table columns={columns} dataSource={tableData} rowKey="id" bordered />
</div>
);
};

export default AntdDemo;

2. Chakra UI(轻量灵活首选)

核心优势:轻量、可访问性好、响应式设计开箱即用。

步骤1:安装依赖
1
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion --save
步骤2:基础使用(响应式卡片+按钮示例)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import React from 'react';
import { ChakraProvider, Box, Button, Card, CardBody, Heading, Text, useBreakpointValue } from '@chakra-ui/react';

const ChakraDemo = () => {
// 响应式配置(移动端/桌面端不同样式)
const cardSize = useBreakpointValue({ base: 'full', md: 'md' }); // 移动端全屏,桌面端中等

return (
<ChakraProvider>
<Box padding={4} maxW="1200px" margin="0 auto">
<Heading as="h2" mb={6}>Chakra UI 示例</Heading>

<Card width={cardSize} mb={4} shadow="md">
<CardBody>
<Heading size="md">轻量组件示例</Heading>
<Text mt={2} color="gray.600">
响应式设计,适配所有设备
</Text>
<Button colorScheme="blue" mt={4} size="sm">
点击按钮
</Button>
</CardBody>
</Card>
</Box>
</ChakraProvider>
);
};

export default ChakraDemo;

四、移动端框架实战用法(快速入门)

1. React Native(原生跨平台首选)

核心优势:一套代码运行iOS/Android,原生性能,生态完善。

步骤1:环境搭建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 安装React Native CLI
npm install -g @react-native-community/cli

# 2. 创建新项目
npx react-native init RnDemo

# 3. 进入项目目录
cd RnDemo

# 4. 运行iOS(需Mac+Xcode)
npx react-native run-ios

# 5. 运行Android(需Android Studio)
npx react-native run-android
步骤2:基础使用(列表+按钮示例)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React from 'react';
import { View, Text, FlatList, TouchableOpacity, StyleSheet } from 'react-native';

// 模拟数据
const data = [
{ id: '1', title: 'React Native 入门' },
{ id: '2', title: '组件化开发' },
{ id: '3', title: '原生桥接' },
];

const RnDemo = () => {
// 点击事件
const handlePress = (item: { title: string }) => {
console.log('点击了:', item.title);
};

return (
<View style={styles.container}>
<Text style={styles.title}>React Native 示例</Text>

{/* 列表组件 */}
<FlatList
data={data}
keyExtractor={(item) => item.id}
renderItem={({ item }) => (
<TouchableOpacity style={styles.item} onPress={() => handlePress(item)}>
<Text style={styles.itemText}>{item.title}</Text>
</TouchableOpacity>
)}
/>
</View>
);
};

// 样式
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 20,
backgroundColor: '#f5f5f5',
},
title: {
fontSize: 24,
fontWeight: 'bold',
marginBottom: 20,
},
item: {
backgroundColor: 'white',
padding: 15,
marginVertical: 8,
borderRadius: 8,
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.1,
shadowRadius: 4,
elevation: 3,
},
itemText: {
fontSize: 16,
},
});

export default RnDemo;

2. Ant Design Mobile(移动端H5首选)

核心优势:Ant Design移动端版本,组件丰富,国内生态好。

步骤1:安装依赖
1
2
npm install antd-mobile --save
# 若使用TypeScript,无需额外配置
步骤2:基础使用(表单+列表示例,移动端高频场景)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import React, { useState } from 'react';
import { Button, Form, Input, List, Toast, Space } from 'antd-mobile';
import { SearchOutline, PlusOutline } from 'antd-mobile-icons';

// 模拟数据
const initialData = [
{ id: '1', name: '张三', phone: '13800138001' },
{ id: '2', name: '李四', phone: '13800138002' },
];

const AntdMobileDemo = () => {
const [data, setData] = useState(initialData);
const [form] = Form.useForm();

// 搜索
const handleSearch = () => {
form.validateFields().then(values => {
Toast.show(`搜索:${values.name || '全部'}`);
console.log(values);
});
};

// 添加
const handleAdd = () => {
const newItem = {
id: Date.now().toString(),
name: '新用户',
phone: '13800138000',
};
setData([...data, newItem]);
Toast.show('添加成功');
};

return (
<div style={{ padding: '16px', maxWidth: '480px', margin: '0 auto' }}>
<h2 style={{ marginBottom: '16px' }}>Ant Design Mobile 示例</h2>

{/* 搜索表单 */}
<Form form={form} layout="horizontal" style={{ marginBottom: '16px' }}>
<Form.Item name="name" label="姓名">
<Input placeholder="请输入姓名" clearable />
</Form.Item>
<Form.Item>
<Space>
<Button color="primary" onClick={handleSearch} icon={<SearchOutline />}>
搜索
</Button>
<Button onClick={handleAdd} icon={<PlusOutline />}>
添加
</Button>
</Space>
</Form.Item>
</Form>

{/* 列表 */}
<List header="用户列表">
{data.map(item => (
<List.Item key={item.id} title={item.name} description={item.phone} />
))}
</List>
</div>
);
};

export default AntdMobileDemo;

3. Taro(多端统一开发首选)

核心优势:一套代码运行H5/小程序/React Native,京东出品,国内生态完善。

步骤1:环境搭建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 安装Taro CLI
npm install -g @tarojs/cli

# 2. 创建新项目
taro init TaroDemo

# 3. 进入项目目录
cd TaroDemo

# 4. 运行H5
npm run dev:h5

# 5. 运行微信小程序
npm run dev:weapp

# 6. 运行React Native
npm run dev:rn
步骤2:基础使用(多端通用组件示例)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import React, { useState } from 'react';
import { View, Text, Button, Input, List } from '@tarojs/components';
import Taro from '@tarojs/taro';
import './index.scss';

// 模拟数据
const initialData = [
{ id: '1', title: 'Taro 多端开发' },
{ id: '2', title: '组件化架构' },
{ id: '3', title: '性能优化' },
];

const TaroDemo = () => {
const [data, setData] = useState(initialData);
const [inputValue, setInputValue] = useState('');

// 添加
const handleAdd = () => {
if (!inputValue.trim()) {
Taro.showToast({ title: '请输入内容', icon: 'none' });
return;
}
const newItem = { id: Date.now().toString(), title: inputValue };
setData([...data, newItem]);
setInputValue('');
Taro.showToast({ title: '添加成功' });
};

return (
<View className="container">
<Text className="title">Taro 多端示例</Text>

{/* 输入框 */}
<View className="input-wrapper">
<Input
className="input"
placeholder="请输入内容"
value={inputValue}
onInput={(e) => setInputValue(e.detail.value)}
/>
<Button className="button" type="primary" onClick={handleAdd}>
添加
</Button>
</View>

{/* 列表 */}
<List className="list">
{data.map(item => (
<List.Item key={item.id}>{item.title}</List.Item>
))}
</List>
</View>
);
};

export default TaroDemo;

五、选型原则(避坑指南)

1. 桌面端/通用项目选型

  • 大型企业级应用:选 Ant Design(组件全、生态完善);
  • 中小型项目/创业项目:选 Chakra UI/Mantine(轻量、开发快);
  • 海外项目:选 MUI/Tailwind UI(国际化适配好);
  • 高定制化需求:选 Tailwind UI(无样式锁死)。

2. 移动端项目选型

  • 原生移动应用:选 React Native(原生性能、生态完善);
  • 移动端H5/混合应用:选 Ant Design Mobile/NutUI/Vant React(国内适配好);
  • 多端项目(H5+小程序+App):选 Taro(一套代码多端运行);
  • RN项目通用UI:选 React Native Elements(轻量简洁);
  • RN代码转Web:选 React Native Web(无缝迁移)。

3. 性能优先选型

  • 优先选体积小的框架(Chakra UI/Ant Design Mobile/Vant React);
  • 所有框架均需开启按需加载
  • 避免同时引入多个UI框架(样式冲突+体积膨胀)。

六、最佳实践

1. 样式隔离

  • 使用CSS Modules/Tailwind CSS避免样式冲突;
  • 自定义组件时,基于UI框架的基础组件扩展(而非重写)。

2. TypeScript 适配

  • 优先选内置TypeScript类型的框架(Antd/MUI/Chakra UI/Ant Design Mobile);
  • 扩展组件类型时,使用泛型继承原有类型:
    1
    2
    3
    4
    import { ButtonProps } from 'antd';
    interface CustomButtonProps extends ButtonProps {
    customProp: boolean;
    }

3. 主题定制

  • Antd/Ant Design Mobile:通过ConfigProvider定制主题;
  • MUI:通过ThemeProvider+createTheme定制;
  • Chakra UI:通过ChakraProvider+extendTheme定制。

4. 移动端适配

  • 使用响应式设计(Chakra UI的useBreakpointValue、Tailwind的响应式前缀);
  • 移动端H5优先选Ant Design Mobile/NutUI/Vant React(专为移动端优化);
  • React Native项目注意原生桥接的性能优化。

七、总结

关键点回顾

  1. 桌面端核心选型:企业级中后台选Ant Design,轻量灵活选Chakra UI,高定制选Tailwind UI,海外/Material风格选MUI;
  2. 移动端核心选型:原生App选React Native,H5选Ant Design Mobile/NutUI,多端选Taro;
  3. 体积优化:所有框架均需开启按需加载,避免全量引入;
  4. 定制原则:基于框架基础组件扩展,而非重写,减少开发成本;
  5. 跨端需求:优先选Taro(H5+小程序+App)或React Native Web(Web+App),实现一套代码多端运行。

选择React UI框架的核心是「匹配项目规模+定制化需求+运行平台」,无需追求“最好”,只需“最适合”。新手建议从Ant Design(桌面端)或Ant Design Mobile(移动端)入手,快速掌握React组件库的使用逻辑。


基于React的UI框架介绍
https://cszy.top/20210728-基于React的UI框架介绍/
作者
csorz
发布于
2021年7月28日
许可协议