1.不要使用 eval()
2.
禁止使用 Object 構造器
let config = new Object() // ✗ 錯誤
3.
不使用 Generator 函數語法
使用
Promise或者async functions來實現異步編程
-
function* helloWorldGenerator() { // ✗ 錯誤
-
yield 'hello';
-
yield 'world';
-
return 'ending';
-
}
4.
SX 屬性均使用單引號
-
import Taro, { Component } from '
-
import { View, Input } from '
-
-
class MyComponent extends Component {
-
render () {
-
return (
-
< View className='test'> // ✓ 正確
-
< Text className="test_text">12</Text> // ✗ 錯誤
-
</ View>
-
)
-
}
-
}
5.
推薦使用對象解構的方式來使用 state、props
-
import Taro, { Component } from '
-
import { View, Input } from '
-
-
class MyComponent extends Component {
-
state = {
-
myTime: 12
-
}
-
render () {
-
const { isEnable } = this.props // ✓ 正確
-
const { myTime } = this.state // ✓ 正確
-
return (
-
< View className='test'>
-
{isEnable && < Text className='test_text'>{myTime}</Text>}
-
</ View>
-
)
-
}
-
}
6.
不要以 class/id/style 作為自定義組件的屬性名
-
<Hello class='foo' /> // ✗ 錯誤
-
<Hello id='foo' /> // ✗ 錯誤
-
<Hello style='foo' /> // ✗ 錯誤
7.
不要在調用 this.setState 時使用 this.state
由於 this.setState 異步的緣故,這樣的做法會導致一些錯誤,可以通過給 this.setState 傳入函數來避免
-
this.setState({
-
value: this.state.value + 1
-
}) // ✗ 錯誤
-
-
-
this.setState(prevState => ({ value: prevState.value + 1 })) // ✓ 正確
8.
map 循環時請給元素加上 key 屬性
-
list.map( item => {
-
return (
-
<View className='list_item' key={item.id}>{item.name}</View>
-
)
-
})
9.
盡量避免在 componentDidMount 中調用 this.setState
因為在
componentDidMount中調用this.setState會導致觸發更新
-
import Taro, { Component } from '
-
import { View, Input } from '
-
-
class MyComponent extends Component {
-
state = {
-
myTime: 12
-
}
-
-
componentDidMount () {
-
this.setState({ // ✗ 盡量避免,可以在 componentWillMount 中處理
-
name: 1
-
})
-
}
-
-
render () {
-
const { isEnable } = this.props
-
const { myTime } = this.state
-
return (
-
< View className='test'>
-
{isEnable && < Text className='test_text'>{myTime}</Text>}
-
</ View>
-
)
-
}
-
}
10.
不要在 componentWillUpdate/componentDidUpdate/render 中調用 this.setState
-
import Taro, { Component } from '
-
import { View, Input } from '
-
-
class MyComponent extends Component {
-
state = {
-
myTime: 12
-
}
-
-
componentWillUpdate () {
-
this.setState({ // ✗ 錯誤
-
name: 1
-
})
-
}
-
-
componentDidUpdate () {
-
this.setState({ // ✗ 錯誤
-
name: 1
-
})
-
}
-
-
render () {
-
const { isEnable } = this.props
-
const { myTime } = this.state
-
this.setState({ // ✗ 錯誤
-
name: 11
-
})
-
return (
-
< View className='test'>
-
{isEnable && < Text className='test_text'>{myTime}</Text>}
-
</ View>
-
)
-
}
-
}
11.
組件最好定義 defaultProps
-
import Taro, { Component } from '@tarojs/taro'
-
import { View, Input } from '@tarojs/components'
-
-
class MyComponent extends Component {
-
-
static defaultProps = {
-
isEnable: true
-
}
-
-
state = {
-
myTime: 12
-
}
-
-
render () {
-
const { isEnable } = this.props
-
const { myTime } = this.state
-
-
return (
-
<View className='test'>
-
{isEnable && <Text className='test_text'>{myTime}</Text>}
-
</View>
-
)
-
}
-
}
12.taro注意:
不能在包含 JSX 元素的 map 循環中使用 if 表達式
以下代碼會被 ESLint 提示警告,同時在 Taro(小程序端)也不會有效:
-
numbers.map( (number) => {
-
let element = null
-
const isOdd = number % 2
-
if (isOdd) {
-
element = <Custom />
-
}
-
return element
-
})
以下代碼不會被警告,也應當在 Taro 任意端中能夠運行:
-
numbers.map( (number) => {
-
let isOdd = false
-
if (number % 2) {
-
isOdd = true
-
}
-
return isOdd && <Custom />
-
})
13.
盡量在 map 循環中使用條件表達式或邏輯表達式
-
numbers.map( (number) => {
-
const isOdd = number % 2
-
return isOdd ? <Custom /> : null
-
})
-
-
numbers.map( (number) => {
-
const isOdd = number % 2
-
return isOdd && <Custom />
-
})
14不能使用 Array#map 之外的方法操作 JSX 數組
15.
先處理好需要遍歷的數組,然后再用處理好的數組調用 map 方法。
-
numbers.filter(isOdd).map( (number) => <View />)
-
-
for (let index = 0; index < array.length; index++) {
-
// do you thing with array
-
}
-
-
const element = array.map(item => {
-
return <View />
-
})
16.
不能在 JSX 參數中使用匿名函數
以下代碼會被 ESLint 提示警告,同時在 Taro(小程序端)也不會有效:
-
<View onClick={ () => this.handleClick()} />
-
-
<View onClick={ (e) => this.handleClick(e)} />
-
-
<View onClick={ () => ({})} />
-
-
<View onClick={ function () {}} />
-
-
<View onClick={ function (e) {this.handleClick(e)}} />
17.
以下代碼不會被警告,也應當在 Taro 任意端中能夠運行:
-
<View onClick={ this.hanldeClick} />
-
-
<View onClick={ this.props.hanldeClick} />
-
-
<View onClick={ this.hanldeClick.bind(this)} />
-
-
<View onClick={ this.props.hanldeClick.bind(this)} />
18
不能在 JSX 參數中使用對象展開符
以下代碼會被 ESLint 提示警告,同時在 Taro(小程序端)也不會有效:
-
<View {...this.props} />
-
-
<View {...props} />
-
-
<Custom {...props} />
19
不支持無狀態組件
以下代碼會被 ESLint 提示警告,同時在 Taro(小程序端)也不會有效:
-
function Test () {
-
return <View />
-
}
-
-
function Test (ary) {
-
return ary.map(() => <View />)
-
}
-
-
const Test = () => {
-
return <View />
-
}
-
-
const Test = function () {
-
return <View />
-
}
20
微信小程序中 onLaunch 通常帶有一個參數 options,在 Taro 中你可以在所有生命周期和普通事件方法中通過 this.$router.params 訪問到,在其他端也適用
21 render中不要寫邏輯
22.
路由傳參
我們可以通過在所有跳轉的 url 后面添加查詢字符串參數進行跳轉傳參,例如
-
// 傳入參數 id= 2&type=test
-
Taro.navigateTo({
-
url: '/pages/page/path/name?id= 2&type=test'
-
})
-
這樣的話,在跳轉成功的目標頁的生命周期方法里就能通過 this.$router.params 獲取到傳入的參數,例如上述跳轉,在目標頁的 componentWillMount 生命周期里獲取入參
-
class C extends Taro.Component {
-
componentWillMount () {
-
console.log( this.$router.params) // 輸出 { id: 2, type: 'test' }
-
}
-
}
23
在 Taro 中尺寸單位建議使用 px、 百分比 %,Taro 默認會對所有單位進行轉換。在 Taro 中書寫尺寸按照 1:1 的關系來進行書寫,即從設計稿上量的長度 100px,那么尺寸書寫就是 100px,當轉成微信小程序的時候,尺寸將默認轉換為 100rpx,當轉成 H5 時將默認轉換為以 rem 為單位的值。
如果你希望部分 px 單位不被轉換成 rpx 或者 rem ,最簡單的做法就是在 px 單位中增加一個大寫字母,例如 Px 或者 PX 這樣,則會被轉換插件忽略。
結合過往的開發經驗,Taro 默認以 750px 作為換算尺寸標准,如果設計稿不是以 750px 為標准,則需要在項目配置 config/index.js 中進行設置,例如設計稿尺寸是 640px,則需要修改項目配置 config/index.js 中的 designWidth配置為 640:
-
const config = {
-
projectName: 'myProject',
-
date: '2018-4-18',
-
designWidth: 640,
-
....
-
}
目前 Taro 支持 750、 640 、 828 三種尺寸設計稿,他們的換算規則如下:
-
const DEVICE_RATIO = {
-
'640': 2.34 / 2,
-
'750': 1,
-
'828': 1.81 / 2
-
}
24.
小程序樣式中引用本地資源
在小程序的樣式中,默認不能直接引用本地資源,只能通過網絡地址、Base64 的方式來進行資源引用,為了方便開發,Taro 提供了直接在樣式文件中引用本地資源的方式,其原理是通過 PostCSS 的 postcss-url 插件將樣式中本地資源引用轉換成 Base64 格式,從而能正常加載。
Taro 默認會對 10kb 大小以下的資源進行轉換,如果需要修改配置,可以在 config/index.js 中進行修改,配置位於 weapp.module.postcss。
具體配置如下
-
// 小程序端樣式引用本地資源內聯
-
url: {
-
enable: true,
-
config: {
-
limit: 10240 // 設定轉換尺寸上限
-
}
-
}
25
JavaScript 表達式也可以嵌套:
-
render () {
-
const todos = ['finish doc', 'submit pr', 'nag dan to review'];
-
return (
-
<ul>
-
{todos.map((todo) => <Text>{todo}</Text>)}
-
</ul>
-
)
-
}
26 條件判斷
<View> {showHeader && <Header />} <Content /> </View>
27
使用 PropTypes 檢查類型
隨着應用日漸龐大,你可以通過類型檢查捕獲大量錯誤。要檢查組件的屬性,你需要配置特殊的 propTypes 屬性:
-
import PropTypes from 'prop-types';
-
-
class Greeting extends Component {
-
render() {
-
return (
-
<h1> Hello, {this.props.name}</h1>
-
);
-
}
-
}
-
-
Greeting.propTypes = {
-
name: PropTypes.string
-
};
如上例,Taro 與 React 一樣,也支持PropTypes 檢查類型,目前在小程序端還有些問題,但在 H5 端可以使用,用法和在 React 里一樣。 更多可參照React 的相關文檔。
28
setState異步
-
// 假設我們之前設置了 this.state.counter = 0
-
updateCounter () {
-
this.setState({
-
counter: 1
-
}, () => {
-
// 在這個函數內你可以拿到 setState 之后的值
-
})
-
}
29
在 Taro 中另一個不同是你不能使用 catchEvent 的方式阻止事件冒泡。你必須明確的使用 stopPropagation。例如,阻止事件冒泡你可以這樣寫:
-
class Toggle extends React.Component {
-
constructor (props) {
-
super(props)
-
this.state = {isToggleOn: true}
-
}
-
-
onClick = (e) => {
-
e.stopPropagation()
-
this.setState(prevState => ({
-
isToggleOn: !prevState.isToggleOn
-
}))
-
}
-
-
render () {
-
return (
-
<button onClick={ this.onClick}>
-
{ this.state.isToggleOn ? 'ON' : 'OFF'}
-
</button>
-
)
-
}
-
}
30
向事件處理程序傳遞參數
通常我們會為事件處理程序傳遞額外的參數。例如,若是 id 是你要刪除那一行的 id,以下兩種方式都可以向事件處理程序傳遞參數:
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>
31
當你通過 bind 方式向監聽函數傳參,在類組件中定義的監聽函數,事件對象 e 要排在所傳遞參數的后面。
-
class Popper extends Component {
-
constructor () {
-
super(...arguments)
-
this.state = { name:'Hello world!' }
-
}
-
-
// 你可以通過 bind 傳入多個參數
-
preventPop (name, test, e) { //事件對象 e 要放在最后
-
e.preventDefault()
-
}
-
-
render () {
-
return <Button onClick={this.preventPop.bind(this, this.state.name, 'test')}></Button>
-
}
-
}
32
父組件控制狀態值來決定子組件的條件渲染
33
Keys
但是在上面的代碼,你會得到一個報錯:提醒你當循環一個數組時應該提供 keys。Keys 可以在 DOM 中的某些元素被增加或刪除的時候幫助 Nerv/小程序 識別哪些元素發生了變化。因此你應當給數組中的每一個元素賦予一個確定的標識。
-
const numbers = [...Array(100).keys()] // [0, 1, 2, ..., 98, 99]
-
const listItems = numbers.map((number) => {
-
return <Text
-
key={ String(number)}
-
class='li'
-
>
-
我是第 { number + 1} 個數字
-
</Text>
-
})
34不同數組中可以使用相同的key
數組元素中使用的 key 在其兄弟之間應該是獨一無二的。然而,它們不需要是全局唯一的。當我們生成兩個不同的數組時,我們可以使用相同的 key:
-
class App extends Componenet {
-
state = {
-
posts: [
-
{ id: 1, title: 'Hello World', content: 'Welcome to learning Taro!'},
-
{ id: 2, title: 'Installation', content: 'You can install Taro from npm.'}
-
]
-
}
-
render () {
-
const { posts } = this.state
-
const sidebar = (
-
<View>
-
{posts.map((post) =>
-
<Text key={post.id}>
-
{post.title}
-
</Text>
-
)}
-
</View>
-
)
-
const content = posts.map((post) => {
-
return <View key={post.id}>
-
<Text>{post.title}</Text>
-
<Text>{post.content}</Text>
-
</View>
-
})
-
return (
-
<View>
-
{sidebar}
-
<View class="divider" />
-
{content}
-
</View>
-
)
-
}
-
}
35
Children
在我們設計組件時,有些組件通常不知道自己的子組件會有什么內容,例如 Sidebar 和 Dialog 這樣的容器組件。
我們建議在這樣的情況使用 this.props.children 來傳遞子元素:
-
class Dialog extends Component {
-
render () {
-
return (
-
< View className='dialog'>
-
< View className='header'>Welcome!</View>
-
< View className='body'>
-
{ this.props.children}
-
</ View>
-
< View className='footer'>-- divider --</View>
-
</ View>
-
)
-
}
-
}
這樣就能允許其它組件在 JSX 中嵌套任意子組件傳遞給 Dialog:
-
class App extends Component {
-
render () {
-
return (
-
< View className='container'>
-
< Dialog>
-
< View className="dialog-message">
-
Thank you for using Taro.
-
</ View>
-
</ Dialog>
-
</ View>
-
)
-
}
-
}
在 <Dialog /> JSX 標簽內的任何內容都會作為它的子元素(Children)都會傳遞到它的組件。
36 refs rechart 元素綁定初始化
class MyComponent extends Component { componentDidMount () { // 如果 ref 的是小程序原生組件,那只有在 didMount 生命周期之后才能通過 // this.refs.input 訪問到小程序原生組件 if (process.env.TARO_ENV === 'weapp') { // 這里 this.refs.input 訪問的時候通過 `wx.createSeletorQuery` 取到的小程序原生組件 } else if (process.env.TARO_ENV === 'h5') { // 這里 this.refs.input 訪問到的是 `@tarojs/components` 的 `Input` 組件實例 } } render () { return <Input ref='input' /> } }
37
利用 externalClasses 定義段定義若干個外部樣式類。這個特性從小程序基礎庫版本 1.9.90 開始支持。
-
/* CustomComp.js */
-
export default CustomComp extends Component {
-
static externalClasses = ['my-class']
-
-
render () {
-
return <View className="my-class">這段文本的顏色由組件外的 class 決定</View>
-
}
-
}
-
/* MyPage.js */
-
export default MyPage extends Component {
-
render () {
-
return <CustomComp my-class="red-text" />
-
}
-
}
-
/* MyPage.scss */
-
.red-text {
-
color: red;
-
}
38
全局樣式類
使用外部樣式類可以讓組件使用指定的組件外樣式類,如果希望組件外樣式類能夠完全影響組件內部,可以將組件構造器中的 options.addGlobalClass 字段置為 true。這個特性從小程序基礎庫版本 2.2.3 開始支持。
-
/* CustomComp.js */
-
export default CustomComp extends Component {
-
static options = {
-
addGlobalClass: true
-
}
-
-
render () {
-
return <View className="red-text">這段文本的顏色由組件外的 class 決定</View>
-
}
-
}
-
/* 組件外的樣式定義 */
-
.red-text {
-
color: red;
-
}
39
使用 this.$componentType 來判斷當前 Taro.Component 是頁面還是組件
40
this.$componentType 可能取值分別為 PAGE 和 COMPONENT,開發者可以根據此變量的取值分別采取不同邏輯。
41
在微信小程序中,從調用 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
-
...
-
}
-
}
42
預加載
在微信小程序中,從調用 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
-
...
-
}
-
}
43 全局變量
全局變量
在 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')
44 上傳下載
上傳、下載
使用方式同 wx.uploadFile,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
const uploadTask = Taro.uploadFile(params).then(...)
使用方式同 wx.downloadFile,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.downloadFile(params).then(...)
45 端能力api
圖片
使用方式同 wx.chooseImage,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.chooseImage(params).then(...)
使用方式同 wx.previewImage,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.previewImage(params).then(...)
使用方式同 wx.getImageInfo,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.getImageInfo(params).then(...)
Taro.saveImageToPhotosAlbum(OBJECT)
使用方式同 wx.saveImageToPhotosAlbum,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.saveImageToPhotosAlbum(params).then(...)
46 端能力api
Taro.showToast(OBJECT)
Taro.showToast({ title: '成功', icon: 'success', duration: 2000 }) .then(res => console.log(res))
Taro.showLoading(OBJECT)
顯示 loading 提示框, 需主動調用 Taro.hideLoading 才能關閉提示框,支持 Promise 化使用。
OBJECT 參數說明:
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| title | String | 是 | 提示的內容 |
| mask | Boolean | 否 | 是否顯示透明蒙層,防止觸摸穿透,默認:false |
| success | Function | 否 | 接口調用成功的回調函數 |
| fail | Function | 否 | 接口調用失敗的回調函數 |
| complete | Function | 否 | 接口調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.showLoading({
-
title: 'loading'
-
})
-
.then( res => console.log(res))
隱藏消息提示框
隱藏 loading 提示框
import Taro from '@tarojs/taro' // 注意:無論用戶點擊確定還是取消,Promise 都會 resolve。 Taro.showModal({ title: 'xxx', content: 'hello world', }) .then(res => console.log(res.confirm, res.cancel))
Taro.showActionSheet(OBJECT)
顯示操作菜單,支持 Promise 化使用。
設置導航條
Taro.setNavigationBarTitle(OBJECT)
使用方式同 wx.setNavigationBarTitle,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.setNavigationBarTitle(params).then(...)
Taro.showNavigationBarLoading()
在當前頁面顯示導航條加載動畫。
Taro.hideNavigationBarLoading()
隱藏導航條加載動畫。
Taro.setNavigationBarColor(OBJECT)
使用方式同 wx.setNavigationBarColor,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.setNavigationBarColor(params).then(...)
API 支持度
| API | 微信小程序 | H5 | ReactNative |
|---|---|---|---|
| Taro.setNavigationBarTitle | ✔️ | ✔️ | |
| Taro.showNavigationBarLoading | ✔️ | ✔️ | |
| Taro.hideNavigationBarLoading | ✔️ | ✔️ | |
| Taro.setNavigationBarColor | ✔️ | ✔️(不支持 animation 參數) |
設置 tabBar
使用方式同 wx.setTabBarBadge,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.setTabBarBadge(params).then(...)
Taro.removeTabBarBadge(OBJECT)
使用方式同 wx.removeTabBarBadge,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.removeTabBarBadge(params).then(...)
使用方式同 wx.showTabBarRedDot,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.showTabBarRedDot(params).then(...)
使用方式同 wx.hideTabBarRedDot,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.hideTabBarRedDot(params).then(...)
使用方式同 wx.setTabBarStyle,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.setTabBarStyle(params).then(...)
使用方式同 wx.setTabBarItem,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.setTabBarItem(params).then(...)
使用方式同 wx.showTabBar,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.showTabBar(params).then(...)
使用方式同 wx.hideTabBar,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.hideTabBar(params).then(...)
API 支持度
| API | 微信小程序 | H5 | ReactNative |
|---|---|---|---|
| Taro.setTabBarBadge | ✔️ | ||
| Taro.removeTabBarBadge | ✔️ | ||
| Taro.showTabBarRedDot | ✔️ | ||
| Taro.hideTabBarRedDot | ✔️ | ||
| Taro.setTabBarStyle | ✔️ | ||
| Taro.setTabBarItem | ✔️ | ||
| Taro.showTabBar | ✔️ | ||
| Taro.hideTabBar | ✔️ |
設置置頂信息
使用方式同 wx.setTopBarText,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.setTopBarText(params).then(...)
API 支持度
| API | 微信小程序 | H5 | ReactNative |
|---|---|---|---|
| Taro.setTopBarText | ✔️ |
導航
使用方式同 wx.navigateTo,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.navigateTo(params).then(...)
使用方式同 wx.redirectTo,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro. redirectTo(params).then(...)
使用方式同 wx.switchTab,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.switchTab(params).then(...)
使用方式同 wx.navigateBack。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.navigateBack({ delta: 2 })
使用方式同 wx.reLaunch,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.reLaunch(params).then(...)
使用方式同 getCurrentPages, 獲取當前的頁面棧,決定需要返回幾層。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.getCurrentPages().length
API 支持度
| API | 微信小程序 | H5 | ReactNative | |
|---|---|---|---|---|
| Taro.navigateTo | ✔️ | ✔️ | ✔️ | |
| Taro.redirectTo | ✔️ | ✔️ | ✔️ | |
| Taro.switchTab | ✔️ | ✔️ | ||
| Taro.navigateBack | ✔️ | ✔️ | ✔️ | |
| Taro.reLaunch | ✔️ | ✔️ | ||
| Taro.getCurrentPages | ✔️ | ✔️ |
動畫
使用方式同 wx.createAnimation。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
const animation = Taro.createAnimation({
-
transformOrigin: "50% 50%",
-
duration: 1000,
-
timingFunction: "ease",
-
delay: 0
-
})
API 支持度
| API | 微信小程序 | H5 | ReactNative |
|---|---|---|---|
| Taro.createAnimation | ✔️ |
位置
使用方式同 wx.pageScrollTo,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.pageScrollTo(params).then(...)
API 支持度
| API | 微信小程序 | H5 | ReactNative |
|---|---|---|---|
| Taro.pageScrollTo | ✔️ |
繪圖
Taro.createCanvasContext(canvasId, this.$scope)
使用方式同 wx.createCanvasContext。
創建並返回繪圖上下文。
使用方式同 wx.drawCanvas。
API 支持度
| API | 微信小程序 | H5 | ReactNative |
|---|---|---|---|
| Taro.createCanvasContext | ✔️ | ||
| Taro.createContext | ✔️ | ||
| Taro.drawCanvas | ✔️ |
下拉刷新
Taro.startPullDownRefresh(OBJECT)
使用方式同 wx.startPullDownRefresh,支持 Promise 化使用。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.startPullDownRefresh(params).then(...)
停止當前頁面下拉刷新。
示例代碼:
-
import Taro from '@tarojs/taro'
-
-
Taro.stopPullDownRefresh()
