Skip to Content
Nextra 4.0 is released 🎉

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-redux
import { 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) } })

最佳实践

性能优化

  1. 合理使用条件编译:避免不必要的代码被打包
  2. 图片优化:使用适当的图片格式和大小
  3. 组件懒加载:使用 React.lazy 进行代码分割
  4. 避免频繁的 setState:合理使用 useCallbackuseMemo

代码规范

  1. 使用 TypeScript:提供更好的类型安全
  2. 组件命名规范:使用 PascalCase
  3. 文件组织:按功能模块组织代码
  4. 注释规范:为复杂逻辑添加注释

常见问题

Q: 如何处理平台差异?

A: 使用条件编译和平台特定的 API 适配。

Q: 如何调试不同平台?

A: 使用对应的开发者工具,如微信开发者工具、浏览器开发者工具等。

Q: 如何处理样式兼容性?

A: 使用 Taro 提供的样式单位和平台特定的样式适配。

学习资源

相关技术

最近更新:12/9/2025, 2:17:56 AM