Taro 简介

Taro 是一套遵循 React 语法规范的 多端开发的解决方案。

Taro 开发微信小程序

首次使用必须安装 Taro 命令行工具

# 使用 npm 安装 CLI

$ npm install -g @tarojs/cli

# OR 使用 yarn 安装 CLI

$ yarn global add @tarojs/cli

复制代码

项目初始化

$ taro init myApp

复制代码

运行

# yarn

$ yarn dev:weapp

# npm script

$ npm run dev:weapp

复制代码

Taro 项目结构

├── config 配置目录

| ├── dev.js 开发时配置

| ├── index.js 默认配置

| └── prod.js 打包时配置

├── src 源码目录

| ├── components 公共组件目录

| ├── pages 页面文件目录

| | ├── index index 页面目录

| | | ├── banner 页面 index 私有组件

| | | ├── index.js index 页面逻辑

| | | └── index.css index 页面样式

| ├── utils 公共方法库

| ├── app.css 项目总通用样式

| └── app.js 项目入口文件

└── package.json

复制代码

Taro 设计稿及尺寸单位

需要在项目配置 config/index.js 中进行设置

# 目前 Taro 支持 750、 640 、 828 三种尺寸设计稿

const config = {

projectName: 'businessAC',

date: '2019-9-23',

designWidth: 750,

deviceRatio: {

'640': 2.34 / 2,

'750': 1,

'828': 1.81 / 2

},

# 行内样式可通过 Taro.pxTransform 来进行转换

Taro.pxTransform(10) // 小程序:rpx,H5:rem

# 默认配置会对所有的 px 单位进行转换,有大写字母的 Px 或 PX 则会被忽略。

{

onePxTransform: true, # 设置 1px 是否需要被转换

unitPrecision: 5, # REM 单位允许的小数位。

propList: ['*'], # 允许转换的属性。

selectorBlackList: [], # 黑名单里的选择器将会被忽略。

replace: true, # 直接替换而不是追加一条进行覆盖。

mediaQuery: false, # 允许媒体查询里的 px 单位转换

minPixelValue: 0 # 设置一个可被转换的最小 px 值

}

复制代码

Taro 路由跳转

// 保留当前页面,跳转到应用内的某个页面,调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,使用wx.navigateBack可以返回到上一级页面。

Taro.navigateTo({

url: '/pages/page/path/name'

})

// 关闭当前页面,跳转到应用内的某个页面。当前页面将不在路由堆中。

Taro.redirectTo({

url: '/pages/page/path/name'

})

// 关闭当前页面,返回上一页面或多级页面。可通过 Taro.getCurrentPages() 获取当前的页面栈,决定需要返回几层。

Taro.navigateBack({

delta: 2

})

// 关闭所有页面,打开到应用内的某个页面。

Taro.reLanch({

url: 'page/home/home?params=xxx'

})

复制代码

静态资源的引入

# 引入 scss

import './css/path/name.scss'

# 引入 js

import { functionName } from './css/path/name.js'

# 引入 图片

import namedPng from '../../images/path/named.png'

复制代码

条件渲染

# 逻辑运算符 &&

{isLoggedIn && 已登录}

{!isLoggedIn && 未登录}

# 三元运算符(条件表达式)

{isLoggedIn ? 已登录 : 未登录}

# 枚举条件渲染 (0.0 看文档才发现还可以这样...)

{

{

'loading': loadingText,

'fail': 加载失败, 点击重试 ,

'no-more': '没有更多了'

}[loadingStatus] # loadingStatus 是 `loading`、`fail`、`no-more` 其中一种状态

}

复制代码

组件使用 PropTypes 检查类型 与 defaultProps 设置默认值

export default class Picker extends PureComponent {

static propTypes = {

data: PropTypes.array,

itemHeight: PropTypes.number,

tempIndex: PropTypes.number,

onJustTemp: PropTypes.func,

}

static defaultProps = {

data: [],

itemHeight: 100,

tempIndex: 1,

onJustTemp: () => console.log('please attach a method to Card Component')

}

render() {

return (

Hello, {this.props.itemHeight}

);

}

复制代码

外部样式类 可以使用 externalClasses

# CustomComp.js

export default class CustomComp extends Component {

static externalClasses = ['my-class']

render () {

return 这段文本的颜色由组件外的 class 决定

}

}

# MyPage.js

export default class MyPage extends Component {

render () {

return

}

}

# MyPage.scss

.red-text {

color: red;

}

复制代码注意:externalClasses 需要使用 短横线命名法 (kebab-case),而不是 React 惯用的 驼峰命名法 (camelCase)。否则无效。

全局样式类

# 使用外部样式类可以让组件使用指定的组件外样式类,

# 如果希望组件外样式类能够完全影响组件内部,

# 可以将组件构造器中的 options.addGlobalClass 字段置为 true。

# CustomComp.js

export default class CustomComp extends Component {

static options = {

addGlobalClass: true

}

render () {

return 这段文本的颜色由组件外的 class 决定

}

}

# 组件外的样式定义

.red-text {

color: red;

}

复制代码

预加载

在微信小程序、支付宝小程序、字节跳动小程序和QQ轻应用中,从调用 Taro.navigateTo、Taro.redirectTo 或 Taro.switchTab 后,到页面触发 componentWillMount 会有一定延时。因此一些网络请求可以提前到发起跳转前一刻去请求。

Taro 提供了 componentWillPreload 钩子,它接收页面跳转的参数作为参数。可以把需要预加载的内容通过 return 返回,然后在页面触发 componentWillMount 后即可通过 this.$preloadData 获取到预加载的内容。

class Index extends Component {

componentWillMount () {

console.log('isFetching: ', this.isFetching)

this.$preloadData

.then(res => {

console.log('res: ', res)

this.isFetching = false

})

}

componentWillPreload (params) {

return this.fetchData(params.url)

}

fetchData () {

this.isFetching = true

...

}

}

复制代码

在小程序中,可以使用 this.$preload 函数进行页面跳转传参

用法:this.$preload(key: String | Object, [ value: Any ])

之所以命名为 $preload,因为它也有一点预加载数据的意味。

如果觉得每次页面跳转传参时,需要先把参数 stringify 后加到 url 的查询字符串中很繁琐,可以利用 this.$preload 进行传参。

另外如果传入的是下一个页面的数据请求 promise,也有上一点提到的“预加载”功能,也能够绕过 componentWillMount 延时。不同点主要在于代码管理,开发者可酌情使用。

// 传入单个参数

// A 页面

// 调用跳转方法前使用 this.$preload

this.$preload('key', 'val')

Taro.navigateTo({ url: '/pages/B/B' })

// B 页面

// 可以于 this.$router.preload 中访问到 this.$preload 传入的参数

componentWillMount () {

console.log('preload: ', this.$router.preload.key)

}

// 传入多个参数

// A 页面

this.$preload({

x: 1,

y: 2

})

Taro.navigateTo({ url: '/pages/B/B' })

// B 页面

componentWillMount () {

console.log('preload: ', this.$router.preload)

}

复制代码

全局变量

在 Taro 中推荐使用 Redux 来进行全局变量的管理,但是对于一些小型的应用, Redux 就可能显得比较重了,这时候如果想使用全局变量,推荐如下使用。

新增一个自行命名的 JS 文件,例如 global_data.js,示例代码如下

const globalData = {}

export function set (key, val) {

globalData[key] = val

}

export function get (key) {

return globalData[key]

}

# 使用

import { set as setGlobalData, get as getGlobalData } from './path/name/global_data'

setGlobalData('test', 1)

getGlobalData('test')

复制代码

入口文件的生命周期

生命周期方法

作用

说明

componentWillMount

程序被载入

在微信小程序中这一生命周期方法对应 app 的 onLaunch

componentDidMount

程序被载入

在微信小程序中这一生命周期方法对应 app 的 onLaunch,在 componentWillMount 后执行

componentDidShow

程序展示出来

在微信小程序中这一生命周期方法对应 onShow,在 H5 中同样实现

componentDidHide

程序被隐藏

在微信小程序中这一生命周期方法对应 onHide,在 H5 中同样实现

componentDidCatchError

错误监听函数

在微信小程序中这一生命周期方法对应 onError

componentDidNotFound

页面不存在监听函数

在微信小程序中这一生命周期方法对应 onPageNotFound

微信小程序中 onLaunch 通常带有一个参数 options,在 Taro 中你可以在所有生命周期和普通事件方法中通过 this.$router.params 访问到

页面的生命周期

生命周期方法

作用

说明

componentWillMount

页面被载入

在微信小程序中这一生命周期方法对应 onLoad

componentDidMount

页面渲染完成

在微信小程序中这一生命周期方法对应 onReady

componentWillReceiveProps

props改变

shouldComponentUpdate

页面是否需要更新

componentWillUpdate

页面即将更新

componentDidUpdate

页面更新完毕

componentWillUnmount

页面退出

在微信小程序中这一生命周期方法对应 onUnload

componentDidShow

页面展示出来

在微信小程序中这一生命周期方法对应 onShow,在 H5 中同样实现

componentDidHide

页面被隐藏

在微信小程序中这一生命周期方法对应 onHide,在 H5 中同样实现

小程序 navigateBack 返回上一级页面 componentWillMount 周期不再执行

未解决...

由于 navigateBack 的页面会执行 componentDidShow 所以把请求函数写在 componentDidShow 这一周期里

0.0

调用 this.setState 时使用 this.state

this.setState({ value: this.state.value + 1 }) # ✗ 错误

this.setState(prevState => ({ value: prevState.value + 1 })) # ✓ 正确

复制代码

在 componentWillUpdate/componentDidUpdate/render 中调用 this.setState

# componentWillReceiveProps 可以在这一生命周期里更新 最新的 props 从 nextProps 获取

componentWillReceiveProps = (nextProps) => {

this.setState({ pickIndex: nextProps.tempIndex })

}

复制代码

不能在包含 JSX 元素的 map 循环中使用 if 表达式

# 会被 ESLint 提示警告,同时在 Taro(小程序端)也不会有效

numbers.map((number) => {

let element = null

const isOdd = number % 2

if (isOdd) {

element =

}

return element

})

# 可以写成这样

numbers.map((number) => {

let isOdd = false

if (number % 2) {

isOdd = true

}

return isOdd &&

})

复制代码

taro 重新加载小程序_Taro 小程序采坑相关推荐

  1. [html] 字体图标加载出来成了小方块,是什么原因呢?如何解决?

    [html] 字体图标加载出来成了小方块,是什么原因呢?如何解决? css样式没有引用吧 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌 ...

  2. Java实现动态加载页面_[Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新)...

    [Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新) 0 2014-05-07 18:00:06 使用该控件,可以根据url,参数,加载html记录模板(包含 ...

  3. C# Winform 未能加载文件或程序集System.Data.SQLite或它的某一个依赖项。试图加载格式不正确的程序...

    在使用Winform 开发了一个小软件,其中使用了SQLite作为数据库 但在我的Win7 64位系统上却出现了以下错误: System.BadImageFormatException: 未能加载文件 ...

  4. 未能加载文件或程序集“XXX”或它的一个依赖项,试图加载格式不正确的程序...

    问题描述: 未能加载文件或程序集"XXX"或它的一个依赖项,试图加载格式不正确的程序 解决方法: 方法一:在vs的配置管理器中,把活动解决方案平台改为Any CPU就可以了 方法二 ...

  5. 未能加载文件或程序集“****”或它的某一个依赖项。试图加载格式不正确的程序。解决方案总结

    未能加载文件或程序集"****"或它的某一个依赖项.试图加载格式不正确的程序.解决方案总结 参考文章: (1)未能加载文件或程序集"****"或它的某一个依赖项 ...

  6. 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B) 参考文章: (1)试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B) (2)https:// ...

  7. 安装Windows服务时出现试图加载格式不正确的程序或系统找不到指定的文件以及相关问题

    安装Windows服务可使用, C:\Windows\Microsoft.NET\Framework64\v4.0.30319>installUtil.exe Microsoft (R) .NE ...

  8. 64位操作系统下IIS报“试图加载格式不正确的程序”错误

    缘由:在64位操作系统下IIS发布32位的项目,报"项目依赖的dll无法读取,试图加载格式不正确的程序"错误. 原因:程序集之间的通讯要么全是64位环境下的,要么全是32位环境下的 ...

  9. 试图加载格式不正确的程序

    部署IIS的时候,会出现 System.BadImageFormatException: Could not load file or assembly 'xxx' or one of its dep ...

  10. System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)...

    System.BadImageFormatException: 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B) 原文 System.BadImageFormatExce ...

最新文章

  1. 增强型固态硬盘支持人工智能工作负载
  2. 注意:阿里Druid连接池监控的两个坑
  3. 在Android Studio中打开Android Device Monitor时报错的解决方法
  4. 常见宽带错误解决方法
  5. 知乎基于Kubernetes的kafka平台的设计和实现
  6. android 版本28 通知栏图标,【专题分析】应用图标、通知栏适配
  7. python在什么平台开发_python主要用于开发什么
  8. matlab数值模拟的例子,第12章 MATLAB 数值模拟实例解析课件
  9. MySQL数据库与Oracle数据库中建表使用单引号和双引号的效果
  10. GC.Collect
  11. XenApp6.5启用3D功能
  12. oracle 下载 地址,oracle11g下载地址
  13. 在竞赛中不断成长--(广油最帅的崽)行走的皮卡丘
  14. 平板电脑(台电x80HD)安装Ubuntu18.04教程- Z3735系列CPU通用
  15. ubuntu下听ape音乐
  16. c语言学籍信息系统,c语言学籍信息管理系统设计
  17. 自定义点击弹出设置百度商桥
  18. 剑指Offer28.对称的二叉树
  19. 不用邀请照样申请Gmail免费邮箱
  20. ibm服务器开机显示如何设置,IBM服务器开机进入WEBBIOS界面配置RAID

热门文章

  1. Linux学习之CentOS(十二)--crontab命令的使用方法
  2. FBI再度要求苹果协助为波士顿黑帮成员的iPhone解锁
  3. Ways to 优化JAVA程序设计和编码,提高JAVA性能
  4. 第六讲:软考中高项06_质量管理、人力资源管理
  5. VVOL、VASA — 为什么如此重要
  6. OpenStack Swift源码安装
  7. 关于职业目标规划的一点讨论
  8. C++ 重定位输入输出
  9. 3.7.1 读取输入
  10. Windows快捷键集锦