Taro是京东凹凸实验室推出的一个脚手架,设计目的是多端统一开发解决方案,一次开发,多端运行
Taro可以使用React/Vue等前端框架开发的,当然typescript肯定是支持
Taro官方文档:https://taro-docs.jd.com/taro/docs/README
Taro支持微信小程序,百度小程序,支付宝小程序,字节小程序,QQ轻应用,ReactNatvie等等
安装Taro脚手架
npm install -g @tarojs/cli
或者
yarn global add @tarojs/cli
升级脚手架工具
taro update self
创建项目
taro init hallo
创建h5项目
yarn dev:h5
创建微信小程序项目
yarn dev:weapp
创建完毕会在dist目录下生成小程序程序
作为一个可以使用react开发的脚手架,React Hooks和jsx也是支持的
Taro组件化(Taro可以使用react开发,因此也具备react的组件化功能)
import Taro, { useState } from '@tarojs/taro'
import { View, Text } from '@tarojs/components'
import './index.less'
function Main(){
const [count ,setUserName] = useState("hallo word")
return (
<View>
<Text>{count}</Text>
</View>
)
}
export default Main
子组件
import { View, Text } from '@tarojs/components'
function Data(){
return (
<View><Text>hallo word</Text></View>
)
}
export default Data
导入
import Data from ‘./data.jsx’
直接在父组件中使用就好
父组件传递参数给子组件
学过react都知道,父组件传递参数给子组件要通过props接收,因此子组件要加props参数
function Data(props){
return (
<View><Text>{props.count}</Text></View>
)
}
export default Data
Taro路由(通过app.jsx的pages,谁在第一个数组的值,那么该就是默认打开的首页)
pages: [
'pages/main/main',
'pages/data/data'
],
注意,不需要导入页面,Taro可以自动化完成
Taro 提供了6个路由api,分别是
navigateTo:记录上级页面,可以返回上级页面
redirectTo:不记录上级页面
switchTab:Tab之间进行切换
navigateBack:返回上一级页面
getCurrentPages:获取当前页面信息(页面栈),注意h5不支持
relaunch:销毁所有页面(关闭)
路由配合页面之间传递参数
发送参数
例如:
import Taro ,{useState} from '@tarojs/taro'
import {View , Text ,Button} from '@tarojs/components'
function Main(){
const [data,setData] = useState("hallo")
const UrlIndex=()=>{
Taro.navigateTo({url:'/pages/index/index'+data})
}
return (
<View>
<Text>hallo word</Text>
<Button onClick={UrlIndex}>GO</Button>
</View>
)
}
export default Main
只需要在Index.jsx下接收就可,例如:
import Taro, { useState ,useEffect } from '@tarojs/taro'
...
const [data,setData] = useState('')
useEffect(()=>{
setData(this.$router.params.data)
},[])
...
<Text>{data}</Text>
多参数传递也是可以
const [data,setData] = useState("hallo")
const [name,setName] = useState("root")
const [pass,setPass] = useState("123")
const UrlIndex=()=>{
Taro.navigateTo({url:'/pages/index/index?data='+data+'&name='+name+'&pass='+pass})
}
接收多参数
const [data,setData] = useState('')
const [name,setName] = useState('')
const [pass,setPass] = useState('')
useEffect(()=>{
setData(this.$router.params.data)
setName(this.$router.params.name)
setPass(this.$router.params.pass)
},[])
...
<Text>{data}</Text>
<Text>{name}</Text>
<Text>{pass}</Text>
导入静态资源
import Taro ,{useState ,useEffect}from '@tarojs/taro'
import {View , Text ,Button, Image} from '@tarojs/components'
import {imgdata,cssdata} from '../../data' // 导入方法(函数)
import logo from '../../img/1.jpg' // 导入静态资源
useEffect(()=>{
imgdata()
cssdata()
},[])
...
<Image src={newbbd} width="300px" height="300px" />
或者
<Image src={require('../../img/1.jpg')} width="300px" height="300px" />
请求远程端口
const testData= ()=>{
Taro.request({
url:'https://xxx.xxx/xxx'
}).then(mainData=>{
console.log(mainData.data)
})
}
url是目标接口,then()是请求完毕获取到的数据