---
name: taro-ui-guide
description: >-
Guides installation, Taro config, styling, and usage of taro-ui (At* components)
for WeChat/Alipay/H5/RN. Use when building Taro apps with taro-ui, picking
components, theming, i18n, or modifying packages/taro-ui source.
---
# Taro UI 使用指南
基于 Taro 3+ 的多端 React 组件库。组件均以 `At` 前缀导出(如 `AtButton`),样式与逻辑分离,需单独引入 SCSS。
官方文档:
源码:`packages/taro-ui/`(本 monorepo)
## 何时使用本 Skill
- 在 Taro 项目中集成、配置或排查 taro-ui
- 选择/组合组件、查 Props、写示例页面
- 自定义主题、国际化、按需加载
- 在本仓库内开发/修复 `packages/taro-ui` 组件
## 版本与安装
| Taro 版本 | taro-ui 版本 |
|-----------|--------------|
| < 3 | `taro-ui@2.3.4` |
| ≥ 3 | `taro-ui@latest`(当前 monorepo 为 3.x) |
```bash
pnpm add taro-ui
# 或 npm install taro-ui@latest
```
**Peer 依赖**:`@tarojs/taro`、`@tarojs/components`、`@tarojs/react`、`react`、`react-dom`(≥16.13)。RN 端另需 `react-native`、`react-native-modal`(可选)。
微信小程序需基础库 **≥ 2.2.3**(`globalClass` 与样式穿透)。
## Taro 项目必配项
在消费方项目的 `config/index.ts`(或 `config/index.js`)中:
**1. H5 编译 node_modules 中的 taro-ui**
```js
h5: {
esnextModules: ['taro-ui']
}
```
**2. Taro 3.5+ 关闭对 taro-ui 的 prebundle**(否则 `@tarojs/components` 可能未打进 bundle,页面异常)
```js
compiler: {
type: 'webpack5',
prebundle: {
exclude: ['taro-ui']
}
}
```
## 样式引入
样式在 `taro-ui/dist/style/`,**不会**随 JS 自动注入,必须显式引入。
### 全量(开发/原型)
入口或 `app.scss`:
```js
import 'taro-ui/dist/style/index.scss'
```
```scss
@import 'taro-ui/dist/style/index.scss';
```
### 按需(推荐生产)
页面/全局 SCSS 按组件名引入(`AtButton` → `button.scss`):
```scss
@import 'taro-ui/dist/style/components/button.scss';
```
或用 `babel-plugin-import`(见 `docs/docs/guide/quickstart.md`):
```js
// babel.config.js plugins
['import', {
libraryName: 'taro-ui',
customName: name => `taro-ui/lib/components/${name.slice(3)}`,
customStyleName: name => `taro-ui/dist/style/components/${name.slice(3)}.scss`
}, 'taro-ui']
```
`At` 前缀去掉后即为目录名:`AtActionSheet` → `action-sheet`。
## 组件使用模式
### 基础引入
```tsx
import { View } from '@tarojs/components'
import { AtButton } from 'taro-ui'
export default function Page() {
return (
{}}>
按钮
)
}
```
### 公共 Props(`AtComponent`)
多数组件支持:
| Prop | 说明 |
|------|------|
| `className` | 外层类名(小程序可用 `globalClass` 覆盖内部 BEM 类) |
| `customStyle` | 内联样式,`string` 或 `CSSProperties` |
| `children` | 子节点 |
类型定义:`packages/taro-ui/types/base.d.ts`。
### 复合组件
按文档组合子组件,例如:
- `AtModal` + `AtModalHeader` / `AtModalContent` / `AtModalAction`
- `AtList` + `AtListItem`
- `AtTabs` + `AtTabsPane`
- `AtActionSheet` + `AtActionSheetItem`
按组件查阅:[references/README.md](references/README.md)(如 `references/button.md`)。**仅在使用该组件时**打开对应文件。
### 受控与回调
- 开关类:`open` / `isOpened` + `onClick` / `onClose`(以各组件 `types/*.d.ts` 为准)
- 表单类:`AtForm` 包裹 `AtInput`、`AtSwitch` 等,注意 `formType`、校验文案
- 环境判断:组件内部常用 `Taro.getEnv()` 区分 WEB / WEAPP / ALIPAY
查 Props 时**优先读** `references/.md`,其次 `packages/taro-ui/types/.d.ts` 与 `docs/docs/components/.md`。
### 命令式 API:`AtMessage`
页面需挂载 ``,再通过 `Taro.atMessage` 调用:
```tsx
import Taro from '@tarojs/taro'
import { AtMessage } from 'taro-ui'
// render 中:
Taro.atMessage({ message: '提示', type: 'success', duration: 3000 })
// type: info | success | error | warning
```
`AtToast` 为声明式:`isOpened`、`text`、`status`、`onClose`。
### 国际化 `ConfigProvider`
```tsx
import { ConfigProvider, AtLoadMore, enUS } from 'taro-ui'
export default function App({ children }) {
return (
{children}
)
}
```
- 内置:`zhCN`(默认)、`enUS`
- `locale` 与默认包深合并,可只覆盖部分 key(如 `LoadMore.moreText`)
- 优先级:组件 props > `ConfigProvider.locale` > 默认 `zhCN`
## 自定义主题
1. **SCSS 变量**(推荐):在引入默认样式**之前**覆盖变量,再 `@import` 全量样式。
```scss
$color-brand: #6190e8;
@import 'taro-ui/dist/style/index.scss';
```
变量表:`packages/taro-ui/src/style/variables/default.scss`。
2. **globalClass**:在 **Page** 级 SCSS 用 `.my-btn.at-button { }` 覆盖(自定义组件内无效)。
3. **`customStyle`**:仅部分组件支持,优先用前两种方式。
> `AtSlider`、`AtSwitch` 暂不支持 SCSS 变量覆盖主题。
## 在本仓库开发 taro-ui
```bash
pnpm install # 根目录,仅允许 pnpm
pnpm build:ui # 构建 packages/taro-ui → dist/
pnpm --filter demo dev:h5
pnpm --filter demo dev:weapp
pnpm --filter docs dev
```
组件实现路径:
| 内容 | 路径 |
|------|------|
| 组件实现 | `packages/taro-ui/src/components//` |
| 类型 | `packages/taro-ui/types/.d.ts` |
| 样式 | `packages/taro-ui/src/style/components/.scss` |
| 导出 | `packages/taro-ui/src/index.ts` |
| RN 实现 | `packages/taro-ui/rn/components/` |
| 单测 | `packages/taro-ui/test/components/` |
新增/修改组件:同步更新 `src/index.ts`、类型文件、样式、`test` 快照;提交信息格式 `feat(ComponentName): ...`(见 `.github/CONTRIBUTING.md`)。
## Agent 工作流
1. **确认场景**:消费方 Taro 项目 vs 本 monorepo 源码修改。
2. **查 API**:`references/.md` → `types/*.d.ts` → `docs/docs/components/*.md`。
3. **写用法**:`import { AtX } from 'taro-ui'` + 对应 `dist/style/components/x.scss`。
4. **排查样式缺失**:是否引入 SCSS;H5 是否配置 `esnextModules`;是否配置 `prebundle.exclude`。
5. **排查小程序样式**:基础库版本、`globalClass`、BEM 类名是否与文档一致。
## 延伸阅读
- [references/README.md](references/README.md) — 组件索引(按维度渐进披露)
- `docs/docs/guide/quickstart.md` — 快速上手与 babel 按需
- `docs/docs/guide/customize-theme.md` — 主题详解