Taro
框架活跃维护京东凹凸实验室开源的多端统一开发框架。支持 React/Vue 语法,一次编译可运行到微信/支付宝/百度/字节/华为/快应用等多端。提供完整的 CLI 工具链、丰富的插件生态。
特性
- React/Vue双语法
- 多端编译(微信/支付宝/百度/抖音/H5/RN)
- 插件化架构
- TypeScript支持
- CSS Modules/Tailwind
- CLI脚手架
- 社区活跃(42k+ stars)
详细文档
Taro
👽 Taro['tɑ:roʊ],泰罗·奥特曼,宇宙警备队总教官,实力最强的奥特曼。
简介
Taro 是一套遵循 React 语法规范的 多端开发 解决方案。现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种端大行其道,当业务同时在不同的端都要求有所表现的时候,针对不同的端编写多套代码的成本显然非常高,这时只编写一套代码就能适配到多端的能力就显得极为重要。
使用 Taro,我们只需书写一套代码,再通过 Taro 的编译工具,即可将源代码分别编译出在不同端(微信/百度/支付宝/字节跳动小程序、快应用、H5、React-Native 等)运行的代码。
学习资源
掘金小册:Taro 多端开发实现原理与实战
加入社区共建
社区共享
使用案例
Taro 已经投入了我们的生产环境中使用,业界也在广泛地使用 Taro 开发多端应用。
Taro 特性
React 语法风格
Taro 的语法规则基于 React 规范,它采用与 React 一致的组件化思想,组件生命周期与 React 保持一致,同时在书写体验上也尽量与 React 类似,支持使用 JSX 语法,让代码具有更丰富的表现力。
代码示例
import Taro, { Component } from '@tarojs/taro'
import { View, Button } from '@tarojs/components'
export default class Index extends Component {
constructor () {
super(...arguments)
this.state = {
title: '首页',
list: [1, 2, 3]
}
}
componentWillMount () {}
componentDidMount () {}
componentWillUpdate (nextProps, nextState) {}
componentDidUpdate (prevProps, prevState) {}
shouldComponentUpdate (nextProps, nextState) {
return true
}
add = (e) => {
// dosth
}
render () {
return (
<View className='index'>
<View className='title'>{this.state.title}</View>
<View className='content'>
{this.state.list.map(item => {
return (
<View className='item'>{item}</View>
)
})}
<Button className='add' onClick={this.add}>添加</Button>
</View>
</View>
)
}
}
快速开发微信小程序
Taro 立足于微信小程序开发,众所周知小程序的开发体验并不是非常友好,比如小程序中无法使用 npm 来进行第三方库的管理,无法使用一些比较新的 ES 规范等等,针对小程序端的开发弊端,Taro 具有以下的优秀特性:
✅ 支持使用 npm/yarn 安装管理第三方依赖。
✅ 支持使用 ES7/ES8 甚至更加新的 ES 规范,一切都可自行配置。
✅ 支持使用 CSS 预编译器,例如 Sass 等。
✅ 支持使用 Redux 进行状态管理。
✅ 支持使用 Mobx 进行状态管理。
✅ 小程序 API 优化,异步 API Promise 化等等。
支持多端开发转化
Taro 方案的初心就是为了打造一个多端开发的解决方案。目前 Taro 代码可以支持转换到 微信/百度/支付宝/字节跳动小程序 、快应用、 H5 端 以及 移动端(React-Native)。
更多功能
如果你还想 Taro 支持新的特性,请使用 FeatHub 进行投票,我们将综合考虑投票结果等因素来确定开发的优先级。
实战开发指南
快速创建项目
# 安装 CLI
npm install -g @tarojs/cli
# 创建项目(React 语法)
taro init my-app
# 创建项目(Vue3 语法)
taro init my-app --template vue3
编译到各端
# 微信小程序
taro build --type weapp
# 支付宝小程序
taro build --type alipay
# 抖音小程序
taro build --type tt
# H5
taro build --type h5
# React Native
taro build --type rn
常见问题与解决方案
-
微信小程序 setData 性能:Taro 在编译时会自动优化 setData,但仍需避免大对象更新。使用
useState时拆分细粒度状态,避免整个页面的 state 合并更新。 -
跨端样式差异:不同端的默认样式不同,建议使用
process.env.TARO_ENV进行条件编译:
// 条件编译
{process.env.TARO_ENV === weapp && <View>仅微信显示</View>}
-
第三方 UI 库集成:
- Vant Weapp:通过
taro-plugin-html使用,或直接使用 NutUI-Taro(京东官方适配版) - NutUI:
npm install @nutui/nutui-taro直接支持 Taro - TDesign:提供
@tarojs/plugin-platform-mini-ci插件
- Vant Weapp:通过
-
分包加载:Taro 支持小程序原生分包,在
app.config.ts中配置:
subPackages: [
{ root: pages/sub, pages: [index] }
]
- API 差异处理:Taro 提供
Taro.xxx()统一 API,底层自动适配各端。对于各端独有 API,用process.env.TARO_ENV条件分支。
