Taro
Taro项目目录:
- .temp:临时目录
- config:配置文件目录
- dist:生成H5小程序目录(不要更改里面的文件)
- node_modules:node包
- Src:项目源文件编写,根据路由配置区分
- .editorconfig:编译器配置文件
- .eslintrc:eslintrc编译器配置
- .gitgnore:配置到此处不进行版本管理
- package.json:项目配置文件
- project.config.json:项目名字及其他配置
其中config目录中的
- dev.js 开发进行配置
- index.js 默认配置
- prod.js 打包配置
taro update seft更新Taro到最新版本指令
Taro使用React Hooks新特性
代码例子
import Taro,{useState} from '@tarojs/taro'
import {View,Text} from '@tarojs/components'
import './index.less'
function Index(){
const [userName,setUserName] = useState ('jspang.com')
return(
<View><Text>{userName}</Text></View>
)
}
export default Index ; //默认导出
Taro子组件的编写和传值
新建子组件 child.jsx页面
代码例子
import {View,Text} from '@tarojs/components'
function child(){
return(
<View><Text>子组件</Text></View>
)
}
export default child;
// 引入子组件:
import child from './child.jsx'
function(){
...
return(
...
child>aaa</child>
...
- 子组件赋值
// 父组件传递:
<child userName={userName}></child>
// 子组件接收:
function child(props){
return(
<View><Text>子组件:{props.userName}</Text></View>
)}
export default child
Taro路由和跳转
Taro项目目录中的Src目录下的app.jsx文件中配置路由代码
- 代码示例
class App extends Components{
config = {
pages:[
'pages/index/index', // pages数组这个就是Taro的路由
'pages/index/index' //谁在最上面就是默认打开页面
]
}
}
路由跳转的五种方法
- navigateTo 支持三端跳转Rn,小程序,H5 可以返回上一页
- redirectTo 没有返回上一页功能
- switchTab 支持三端跳转,顶部栏
- navigateBack 返回上一级页面
- relaunch 关闭所有页面打开其他页面
- getCurrentPages 获得当前页面参数
Taro 路由跳转代码示例
import Taro from '@tarojs/taro'
import {View,Text,Button} from '@tarojs/components'
function Blog(){
const gotoIndex =()=>{
Taro.navigateTo({url:'/pages/index/index'})
}
return(
<View>
<Text>Blog page</Text>
<Button onClick={gotoIndex}>Go To Index</Button>
</View>
)
}
export default Blog;
Taro路由传参和接收
代码示例
import {useState,//添加useEffect} from '@tarojs/taro'
function Blog(){
const [blogTitle,setBlogTitle]=useState('jspangBlog') //声明
const [introduce,setIntroducee]=useState('jspang_com')//传递多个参数
const gotoIndex=()=>{
Taro.navigateTo({url:'/pages/index/index?blogTitle='+blogTitle})
Taro.navigateTo({url:'/pages/index/index?blogTitle='+blogTitle+'&introduce='+introduce})//传递多个参数 拼接字符串传参
}
}
}
function Index(){
const [blogTitle,setBlogTitle]=useState('')
const [introduce,setIntroduce]=useState('')
useEffect(()=>{ //Hooks方法加空数组后,页面载入第一次时刷新只执行一次
setBlogTitle(this.$route.params.blogTitle)
setIntroduce(this.$route.params.introduce)
},[])
return( //渲染页面
<View>{blogTitle}</View>
<View>{introduce}</View>
)
}
Taro静态资源引入
引入工具类
新建一个tools文件夹 在其中新建一个index.js
- 代码如下
export function xiedajiao(){
console.log('1111')
}
- 引入到项目文件
import {xiedajiao} from '../../tools' //引入
useEffect(()=>{
xiedajiao() //直接引入方法到useEffect中
},[]) // 结果会在网页的f12中显示出打印的1111
Image引入的两种方法
- import newbdd from '../../static/bbd12.jpg'
// 在函数中
- <Image src={require('路径')} />
渲染列表
组建数组
const girls = [
{id:1,name:'a'},
{id:1,name:'b'},
{id:1,name:'c'},
{id:1,name:'d'}]
渲染方式
{
girls.map((item.index)=>{
return(
<View key={index}>{item.id}:{item.name}</View>
//尽量加上key
}
}
Taro三元运算符
- Taro中不能用if else 只能用三元运算符或短路运算符进行判断
//声明 let zhujiaoNum =1
//判断
1. <View>男主:{zhujiaoNum ===1?'a':'b'}</View>
2. <View>男主:{zhujiaoNum ===1&&'a'||'b'}</View>
Taro的请求远程数据
通过按钮触发获取列表
<Button onClick={testHandler}>获取列表</Button>
声明触发的箭头函数
const testHandler=()=>{
Taro.request({url:'网址'
}).then(res=>{
console.log(res,data)
})
}
渲染请求的数据到页面
//声明: const[articleList,setArticleList]=useState([])
重新赋值:
...then(res=>{
...
setArticleList(res.data.List)
...
遍历ArticleList
{
articleList.map((item.index)=>{
return(
<View key={index}>- {item.title}</View>
)
})
}
}