Taro

Taro 专栏收录该内容
1 篇文章 0 订阅

Taro

学习视频地址:👉技术胖Taro免费视频教程

笔记参考文章地址:👉技术胖Taro教程博客

1.Taro框架简介

Taro的优点:

Taro优点

目前Taro支持的终端:

  • 微信小程序
  • H5 移动端Web页面
  • 百度小程序
  • 支付宝小程序
  • 快应用
  • ReactNative(生成原生的移动端app应用)
  • 字节跳动小程序
  • QQ轻应用

2.Taro开发环境搭建和Hello World

Taro是一套遵循React语法规范的多端开发解决方案,使用Taro,只书写一套代码,再通过Taro的编译工具,讲源代码分别编译出可以再不同端(微信小程序,H5,RN等)运行代码。

开发环境搭建

1.安装脚手架

npm方法

npm install -g @tarojs/cli

yarn方法

yarn global add @tarojs/cli

2.创建项目并初始化项目

使用下面的命令来创建项目

taro init myDemo1

在创建项目的时候会让你选择一些信息,比如项目描述,框架是基于React还是Vuecss使用的是sass还是less,模板是选择Redux还是默认模板等等…在这里我选择的是基于React,less,默认模板(模板选择不一样对应生成的文件目录以及文件内容也会不一样)。

3.运行项目

运行到浏览器(h5端)

npm run dev:h5

或者

yarn dev:h5

运行到小微信程序

npm run dev:weapp

或者

yarn dev:weapp

运行到小程序的话,Taro编译工具会把你的代码重新编译成一份小程序的代码并存放在dist目录下。在微信开发者工具中直接导入项目(不是新建项目)并选择dist文件夹即可。Taro作为一个可以运行到多端的框架代码,在进行维护修改代码时只需要修改源代码即可不需要在运行端修改。

我们每次运行到浏览器端(或者其它端)的时候,都会出现红字,提示我们不是最新版本,可以在终端中输入下列命令进行升级:

taro update self

3.项目目录分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZlHYCb2v-1604818612331)(C:\Users\Aurora\AppData\Roaming\Typora\typora-user-images\image-20201104141726287.png)]

--config                 配置文件
  --dev.js               项目开发时所用的配置
  --index.js             项目默认的基本配置
  --prod.js              项目打包时所用的配置
--dist                   dist目录用来用来存放对应的运行端的特殊代码,里面的代码不需要改
--node_modules           整个项目所需要的包
--src                    代码文件
  --pages                针对小程序设计的页面文件夹
--.editorconfig          设置语法格式的文件
--.eslintrc              配置eslint所要的配置
--.gitignore             在配置git时指定哪些目录不需要上传
--package.json           整个项目的配置文件
--project.config.json    项目信息的配置文件

官方给出的目录结构说明

├── dist                   编译结果目录
├── config                 配置目录
|   ├── dev.js             开发时配置
|   ├── index.js           默认配置
|   └── prod.js            打包时配置
├── src                    源码目录
|   ├── pages              页面文件目录
|   |   ├── index          index 页面目录
|   |   |   ├── index.js   index 页面逻辑
|   |   |   └── index.css  index 页面样式
|   ├── app.css            项目总通用样式
|   └── app.js             项目入口文件
└── package.json

4.Taro使用React Hooks新特性

/src/page/index/index.js页面,可以看到目前的代码全部都是React的基本语法,比如:继承components,比如React经典的生命周期,比如原来使用的statesetState赋值。

首先在/src/page/index/index.js中引入useState

import React, { useState } from 'react'

注意,引入useState的时候其实from 'react'from '@tarojs/taro'都可以,所以form不用进行更改,只需要将原来{ Component }换成{ useState }即可。app.js也不需要更改。

import React, { useState } from 'react'
import { View, Text } from '@tarojs/components'
import './index.less'

function Index(){

  const [userName ,setUserName] = useState('Hello Taro!!!!')

  return ( 
    <View>
        <Text>{userName}</Text>
    </View>
  )

}

export default Index

5.Taro中子组件的编写和传值

1.编写子组件

打开/myDemo1/src/pages/index文件夹,在文件下面建立一个child.jsx文件:

import React from 'react'
import { View, Text } from '@tarojs/components'
function Child(){
  return ( 
    <View><Text>我是子组件</Text></View>
  )
}
export default Child

接着在父组件index中把子组件child引入进来并渲染到页面上即可:

import React, { useState } from 'react'
import { View, Text } from '@tarojs/components'
import './index.less'
import Child from './child' //引入子组件

function Index(){

  const [userName ,setUserName] = useState('Hello Taro!!!!')

  return ( 
    <View>
        <Text>{userName}</Text>
        <Child></Child> //渲染子组件到页面
    </View>
  )

}

export default Index

2.向子组件传值

父组件向子组件传值用到的是props,首先在父组件中:

<Child username={userName}></Child>

大括号内的是在useState中声明的变量,前面的username可自定义。

在子组件中:

import React from 'react'
import { View, Text } from '@tarojs/components'
function Child(props){
  return ( 
  <View><Text>我是子组件,父组件给我传递的值是{props.username}</Text></View>
  )
}
export default Child

6.Taro路由配置和跳转

1.路由配置

app.js的配置文件app.config.js中的pages属性表示的是Taro的路由信息,并且谁配置在第一个数组位置,谁就是默认打开的首页

首先在src/pages下新建一个文件夹blog,在blog文件夹下新建一个blog.jsx

import React from 'react'
import {View,Text} from '@tarojs/components'

function Blog(){
    return (
        <View>
            <Text>Blog Page</Text>
        </View>
    )
}
export default Blog

接着在app.config.js中的pages属性中增加一项blog并且放在第一个位置,那么运行之后就能看到Blog页面。

export default {
  pages: [
    'pages/blog/blog',
    'pages/index/index'
  ],
  window: {
    backgroundTextStyle: 'light',
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: 'WeChat',
    navigationBarTextStyle: 'black'
  }
}

如果没有看到想要的效果,重新npm run dev:h5再运行一遍试试。

2.路由跳转

Taro提供了6个相关的导航API,我们可以使用这些API进行跳转,需要注意的是这些有些是小程序专用的。

  • navigateTo: 最基本的跳转方式,可以返回上级页面。三端都支持的(小程序、H5、React Native)

  • redirectTo不记录上集页面,直接跳转。三端都支持的(小程序、H5、React Native)

  • switchTab: Tab之间进行切换,这个要配合Taro的导航栏一起使用,三端都支持的(小程序、H5、React Native)

  • navigateBack: 返回上一级页面,这个在小程序中常使用,三端都支持的(小程序、H5、React Native)

  • relaunch:关闭所有额面,打开到应用内某个页面。三端都支持的(小程序、H5、React Native)

  • getCurrentPages:获取当前页面信息所用,这个H5是不支持的

这些API都和微信小程序中的语法类似。

例如现在想要实现的功能是从博客页面blog.jsx跳转回首页index.jsx

首先在blog.jsx引入Taro(实现路由跳转必需)和按钮组件

import Taro from '@tarojs/taro'
import { View , Text , Button } from '@tarojs/components'

接着直接在function中声明跳转的方法:

const gotoIndex=()=>{
	Taro.navigateTo({url:'/pages/index/index'})
}

最后绑定到按钮上:

<Button onClick={gotoIndex}>我要去Index页面</Button>

全部代码:

import React from 'react'
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}>我要去Index页面</Button>
        </View>
    )
}
export default Blog

这样就实现了路由的跳转

7.Taro路由参数的传递和接收

首先在blog.jsx中定义一个数据blogTitle

const [blogTitle,setBlogTitle] = useState('JSPan---Taro教程')

然后在路由跳转处向跳转页面传递参数

Taro.navigateTo({
	url:'/pages/index/index?blogTitle=' + blogTitle //这里采用字符串拼接的方式传递参数
})

跳转页(接收参数页面)

import React, { useState,useEffect } from 'react' //引入useEffect
...
const [blogTitle,setBlogTitle] = useState('') //同样声明一个数据用于接收传递过来的参数
...
useEffect(()=>{
	setBlogTitle(Taro.Current.router.params.blogTitle)
},[])
...
return ( 
    <View>
        <Text>{userName}</Text>
        <Child username={userName}></Child>
        <View>{blogTitle}</View>
    </View>
)

传递参数:url:'路由地址?参数键=' + 参数值,如果碰到多个参数中间用&连接即可。例如url: '/pages/index/index?blogTitle=' + blogTitle +'&introduce=' + introduce

接收参数:Taro.Current.router.params.键值

8.Taro静态资源的引入

1.引入JS资源

/src目录下,新建一个/tools文件夹,然后在文件夹下边建立一个index.js文件,随便写两个方法并暴露出去:

export function xiedajiao(){
    console.log('我是谢大脚')
}

export function liuying(){
    console.log('我是刘英')
}

加入要在blog.jsx中引入使用这两个方法:

import { xiedajiao , liuying } from '../../tools'

function Blog(){
...
	useEffect(()=>{
        xiedajiao();
        liuying();
    },[])
}

引入这两个方法的时候,不能写import tools from `../../tools,因为你写的工具类/tools/index.js并不是有一个类,而是两个单独的方法。

2.引入图片资源

通常的图片引入方法是设置Image标签的src属性,例如:

<Image src="../../static/newbbd0001.jpg" width="100px" height="100px" />

这种方式是没办法引入成功的,因为我们的程序最终是要通过Taro编译器进行编译的,编译后的文件目录会进行改变,你所引用的图片就会失效。

正确的引入方式是先用import进行引入,然后再使用src属性:

import reactimg from '../../static/timg.jpg'
...
<View>
    <Image src={reactimg}></Image>
</View>

另外还有一种方式就是:

<Image src={require('../../static/timg.jpg')}></Image>

9.Taro列表渲染和三元运算符

1.列表渲染

先在blog.jsx中声明一个数组对象:

const girls = [
    {id:1,name:'谢大脚'},
    {id:2,name:'刘英'},
    {id:3,name:'王小蒙'},
    {id:4,name:x'香秀'}
]

然后在return中渲染出列表:

{ 
	girls.map((item,index)=>{
        return (
        	<View key={index}>{item.id}:{item.name}</View>
        )
    }) 
}

2.在jsx中使用逻辑判断(使用三元运算符)

错误示例

const zhujueNum = 1
...
<view>
    {
        if(zhujueNum===1){
            return ('玉田')
        }else{
            return('刘能')
        }
    }
</view>

Taro中,不能使用if...else...

正确示例

// 使用三元运算符
<view>
	男主角是:{zhujueNum==1?'玉田':'刘能'}
</view>

或者

// 使用短路运算符
<view>
    男主角是:{zhujueNum==1 && '玉田' || '刘能'}
</view>

10.Taro请求远程数据

Taro请求远程数据用到的方法是Taro.request获取远程接口数据,并渲染到页面上。

1.获取数据

const testHandler= ()=>{
    Taro.request({
        url:'https://apiblog.jspang.com/default/getArticleList'
    }).then(res=>{
        console.log(res.data)
    })
}
...
<Button onClick={testHandler}>获取接口数据</Button>

2.渲染到页面上

const  [articleList,setArticleList] = useState([])
...
const testHandler= ()=>{
        Taro.request({
            url:'https://apiblog.jspang.com/default/getArticleList'
        }).then(res=>{
            console.log(res.data)
            setArticleList(res.data.list) //将获取到的接口数据赋值给变量articleList
        })
    }
...
// 渲染到页面
{
    articleList.map((item,index)=>{
    	return (<View key={index}>- {item.title} </View>)
    })
}

})
}

获取接口数据


#### 2.渲染到页面上

```jsx
const  [articleList,setArticleList] = useState([])
...
const testHandler= ()=>{
        Taro.request({
            url:'https://apiblog.jspang.com/default/getArticleList'
        }).then(res=>{
            console.log(res.data)
            setArticleList(res.data.list) //将获取到的接口数据赋值给变量articleList
        })
    }
...
// 渲染到页面
{
    articleList.map((item,index)=>{
    	return (<View key={index}>- {item.title} </View>)
    })
}
  • 0
    点赞
  • 2
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值