Taro 跨端开发框架
Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/QQ 小程序、H5、React Native 等应用。
核心特性
- 多端统一开发:一套代码可以编译到微信小程序、H5、React Native、支付宝小程序、百度小程序、字节跳动小程序、QQ 小程序、京东小程序等多个平台
- React 语法:支持 React 语法,包括 Hooks、函数式组件等现代 React 特性
- TypeScript 支持:内置 TypeScript 支持,提供完整的类型检查
- 丰富的生态:支持使用 npm 包,兼容 React 生态
- 性能优化:针对各端特性进行优化,提供最佳性能
安装与初始化
# 安装 Taro CLI
npm install -g @tarojs/cli
# 创建新项目
taro init myApp
# 选择框架和模板
# - 框架:React/Vue/Nerv
# - 模板:默认模板/TypeScript 模板项目结构
myApp/
├── config/ # 项目编译配置目录
│ ├── dev.js # 开发环境配置
│ ├── index.js # 默认配置
│ └── prod.js # 生产环境配置
├── src/ # 源码目录
│ ├── pages/ # 页面文件目录
│ │ └── index/ # 示例页面
│ ├── app.config.js # 全局配置
│ ├── app.js # 项目入口文件
│ └── app.scss # 全局样式
├── package.json
└── project.config.json # 微信小程序项目配置基础使用
创建页面组件
import { Component } from 'react'
import { View, Text } from '@tarojs/components'
import './index.scss'
export default class Index extends Component {
state = {
title: 'Hello Taro!'
}
componentWillMount() {}
componentDidMount() {}
componentWillUnmount() {}
componentDidShow() {}
componentDidHide() {}
render() {
return (
<View className='index'>
<Text>{this.state.title}</Text>
</View>
)
}
}使用 Hooks
import { useState, useEffect } from 'react'
import { View, Text } from '@tarojs/components'
export default function Index() {
const [count, setCount] = useState(0)
useEffect(() => {
console.log('组件挂载完成')
}, [])
return (
<View>
<Text>计数: {count}</Text>
<Button onClick={() => setCount(count + 1)}>增加</Button>
</View>
)
}路由配置
// app.config.js
export default {
pages: [
'pages/index/index',
'pages/user/index',
'pages/about/index'
],
window: {
backgroundTextStyle: 'light',
navigationBarBackgroundColor: '#fff',
navigationBarTitleText: 'WeChat',
navigationBarTextStyle: 'black'
},
tabBar: {
list: [
{
pagePath: 'pages/index/index',
text: '首页'
},
{
pagePath: 'pages/user/index',
text: '我的'
}
]
}
}跨端适配
条件编译
// 平台特定代码
if (process.env.TARO_ENV === 'weapp') {
// 微信小程序特定代码
} else if (process.env.TARO_ENV === 'h5') {
// H5 特定代码
} else if (process.env.TARO_ENV === 'rn') {
// React Native 特定代码
}样式适配
// 使用 Taro 提供的样式单位
.container {
width: 750rpx; // 小程序
height: 100vh; // H5
padding: 20px; // 通用
}状态管理
使用 Redux
npm install @tarojs/redux @tarojs/redux-h5 redux react-reduximport { Provider } from 'react-redux'
import { store } from './store'
function App({ children }) {
return (
<Provider store={store}>
{children}
</Provider>
)
}使用 Mobx
npm install mobx mobx-react常用 API
网络请求
import Taro from '@tarojs/taro'
// 发起请求
Taro.request({
url: 'https://api.example.com/data',
method: 'GET',
success: (res) => {
console.log(res.data)
}
})存储
// 设置存储
Taro.setStorage({
key: 'userInfo',
data: { name: 'John', age: 25 }
})
// 获取存储
Taro.getStorage({
key: 'userInfo',
success: (res) => {
console.log(res.data)
}
})最佳实践
性能优化
- 合理使用条件编译:避免不必要的代码被打包
- 图片优化:使用适当的图片格式和大小
- 组件懒加载:使用
React.lazy进行代码分割 - 避免频繁的 setState:合理使用
useCallback和useMemo
代码规范
- 使用 TypeScript:提供更好的类型安全
- 组件命名规范:使用 PascalCase
- 文件组织:按功能模块组织代码
- 注释规范:为复杂逻辑添加注释
常见问题
Q: 如何处理平台差异?
A: 使用条件编译和平台特定的 API 适配。
Q: 如何调试不同平台?
A: 使用对应的开发者工具,如微信开发者工具、浏览器开发者工具等。
Q: 如何处理样式兼容性?
A: 使用 Taro 提供的样式单位和平台特定的样式适配。
学习资源
相关技术
- React - 前端框架
- Vue - 前端框架
- 小程序开发 - 平台开发
- TypeScript - 类型系统
最近更新:12/9/2025, 2:17:56 AM