99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Taro React

2021-09-23 20:51 更新

在 Taro 可以通過 ?import * as React from 'react'? 來使用 React,JSX 語法沒有任何限制,但和在瀏覽器中使用 React 依然有一些不同,具體體現(xiàn)在:

入口組件

每一個 Taro 應(yīng)用都需要一個入口組件用來注冊應(yīng)用,入口文件默認是 ?src? 目錄下的 ?app.js?,在 Taro 中使用 React,入口組件必須導出一個 React 組件,在入口組件中我們可以設(shè)置全局狀態(tài)或訪問小程序入口實例的生命周期:

  1. importReact,{Component}from'react'
  2. // 假設(shè)我們要使用 Redux
  3. import{Provider}from'react-redux'
  4. import configStore from'./store'
  5. import'./app.css'
  6. const store = configStore()
  7. classAppextendsComponent{
  8. componentDidMount (){}
  9. // 對應(yīng) onShow
  10. componentDidShow (){}
  11. // 對應(yīng) onHide
  12. componentDidHide (){}
  13. // 對應(yīng) onError
  14. componentDidCatchError (){}
  15. render (){
  16. // 在入口組件不會渲染任何內(nèi)容,但我們可以在這里做類似于狀態(tài)管理的事情
  17. return(
  18. <Provider store={store}>
  19. {this.props.children}/* this.props.children 是將要被渲染的頁面 */
  20. </Provider>
  21. )
  22. }
  23. }
  24. exportdefaultApp

對于一個入口文件(例如?app.jsx?)而言,我們可以新增一個 ?app.config.js? 的文件進行全局配置,?app.config.js? 的默認導出就是全局配置,配置規(guī)范基于微信小程序的全局配置進行制定,所有平臺進行統(tǒng)一:

  1. // app.config.js
  2. exportdefault{
  3. pages:[
  4. 'pages/index/index'
  5. ],
  6. window:{
  7. backgroundTextStyle:'light',
  8. navigationBarBackgroundColor:'#fff',
  9. navigationBarTitleText:'WeChat',
  10. navigationBarTextStyle:'black'
  11. }
  12. }

組件生命周期

onLaunch(options)

在微信/百度/字節(jié)跳動/支付寶小程序中這一生命周期方法對應(yīng) app 的 ?onLaunch?

在此生命周期中通過 ?getCurrentInstance().router.params?,可以訪問到程序初始化參數(shù)。

componentWillMount()

監(jiān)聽程序初始化,初始化完成時觸發(fā)(全局只觸發(fā)一次)

參數(shù)格式如下

屬性類型說明微信小程序百度小程序字節(jié)跳動小程序支付寶小程序H5RN
pathstring啟動小程序的路徑??????????
scenenumber啟動小程序的場景值?????????
queryObject啟動小程序的 query 參數(shù)??????????
shareTicketstringshareTicket,詳見獲取更多轉(zhuǎn)發(fā)信息?????????
referrerInfoObject來源信息。從另一個小程序、公眾號或 App 進入小程序時返回。否則返回 {}??????????

其中,場景值 scene,在微信小程序和百度小程序中存在區(qū)別,請分別參考 微信小程序文檔 和 百度小程序文檔

來源信息 referrerInfo 的數(shù)據(jù)結(jié)構(gòu)如下

屬性類型說明微信小程序百度小程序字節(jié)跳動小程序支付寶小程序
appIdstring來源小程序,或者公眾號(微信中)????????
extraDataObject來源小程序傳過來的數(shù)據(jù),微信和百度小程序在scene=1037或1038時支持????????
sourceServiceIdstring來源插件,當處于插件運行模式時可見?????(基礎(chǔ)庫版本 1.11.0)

componentDidMount()

頁面初次渲染完成時觸發(fā),一個頁面只會調(diào)用一次,代表頁面已經(jīng)準備妥當,可以和視圖層進行交互。此生命周期可以無法訪問 ?getCurrentInstance().router?。此生命周期可以訪問 Taro DOM 并且更改 DOM 或添加事件,但無法通過 ?Taro.createSelectorQuery? 查找小程序 DOM。

componentDidShow(options)

在微信/百度/字節(jié)跳動/支付寶小程序中這一生命周期方法對應(yīng) ?onShow?,在 H5/RN 中同步實現(xiàn)

程序啟動,或從后臺進入前臺顯示時觸發(fā),微信小程序中也可以使用 ?Taro.onAppShow? 綁定監(jiān)聽

在此生命周期中通過 ?getCurrentInstance().router.params?,可以訪問到程序初始化參數(shù)。

參數(shù)與 ?componentWillMount? 中獲取的基本一致,但百度小程序中補充兩個參數(shù)如下

屬性類型說明最低版本
entryTypestring展現(xiàn)的來源標識,取值為 user/ schema /sys :
user:表示通過home前后
切換或解鎖屏幕等方式調(diào)起;
schema:表示通過協(xié)議調(diào)起;
sys:其它
2.10.7
appURLstring展現(xiàn)時的調(diào)起協(xié)議,僅當entryType值為 schema 時存在2.10.7

componentDidHide()

在微信/百度/字節(jié)跳動/支付寶小程序中這一生命周期方法對應(yīng) ?onHide?,在 H5/RN 中同步實現(xiàn)

程序從前臺進入后臺時觸發(fā),微信小程序中也可以使用 ?Taro.onAppHide? 綁定監(jiān)聽

componentDidCatchError(String error)

在微信/百度/字節(jié)跳動/支付寶小程序中這一生命周期方法對應(yīng) ?onError?,H5/RN 中尚未實現(xiàn)

程序發(fā)生腳本錯誤或 API 調(diào)用報錯時觸發(fā),微信小程序中也可以使用 ?Taro.onError? 綁定監(jiān)聽

componentDidNotFound(Object)

在微信/字節(jié)跳動小程序中這一生命周期方法對應(yīng) ?onPageNotFound?,其他端尚未實現(xiàn)微信小程序中,基礎(chǔ)庫 1.9.90 開始支持

程序要打開的頁面不存在時觸發(fā),微信小程序中也可以使用 ?Taro.onPageNotFound? 綁定監(jiān)聽

參數(shù)如下

屬性類型說明
pathstring不存在頁面的路徑
queryObject打開不存在頁面的 query 參數(shù)
isEntryPageboolean是否本次啟動的首個頁面(例如從分享等入口進來,首個頁面是開發(fā)者配置的分享頁面)

頁面組件

每一個 Taro 應(yīng)用都至少包括一個頁面組件,頁面組件可以通過 Taro 路由進行跳轉(zhuǎn),也可以訪問小程序頁面的生命周期:

  1. importReact,{Component}from'react'
  2. import{View,Button,Text}from'@tarojs/components'
  3. classIndexextendsComponent{
  4. config ={
  5. navigationBarTitleText:'首頁'
  6. }
  7. // 對應(yīng) onShow
  8. componentDidShow (){}
  9. // 對應(yīng) onHide
  10. componentDidHide (){}
  11. // 對應(yīng) onPullDownRefresh,除了 componentDidShow/componentDidHide 之外,
  12. // 所有頁面生命周期函數(shù)名都與小程序相對應(yīng)
  13. onPullDownRefresh (){
  14. },
  15. // 對應(yīng) onPullDownRefresh
  16. onReachBottom (){
  17. },
  18. componentWillUnmount (){}
  19. componentDidShow (){}
  20. componentDidHide (){}
  21. render (){
  22. return(
  23. <View className='index'>
  24. </View>
  25. )
  26. }
  27. }
  28. exportdefaultIndex

配置文件

和入口組件一樣,對于一個頁面文件(例如?./pages/index/index.jsx?)而言,我們可以新增一個 ?./pages/index/index.config.js? 的文件進行頁面配置,?index.config.js? 的默認導出就是頁面配置:

  1. // ./pages/index/index.jsx
  2. exportdefault{
  3. navigationBarTitleText:'首頁'
  4. }

生命周期

onReady()

頁面首次渲染完畢時執(zhí)行,此生命周期在小程序端對應(yīng)小程序頁面的 ?onReady? 生命周期。從此生命周期開始可以使用 ?createCanvasContext? 或 ?createselectorquery? 等 API 訪問真實 DOM。

在可以非頁面組件中,可以使用 Taro 內(nèi)置的 消息機制 訪問頁面組件的 ?onReady()? 生命周期:

  1. import{ eventCenter, getCurrentInstance }from'@tarojs/taro'
  2. classTestextendsReact.Component{
  3. componentDidMount (){
  4. eventCenter.once(getCurrentInstance().router.onReady,()=>{
  5. const query =Taro.createSelectorQuery()
  6. query.select('#only').boundingClientRect()
  7. query.exec(res =>{
  8. console.log(res,'res')
  9. })
  10. console.log('onReady')
  11. })
  12. }
  13. render (){
  14. return(
  15. <View id="only">
  16. </View>
  17. )
  18. }
  19. }

onLoad(options)

頁面創(chuàng)建時執(zhí)行,此生命周期在小程序端對應(yīng)小程序頁面的 ?onLoad? 生命周期。此生命周期可以訪問 ?getCurrentInstance().router?。

componentWillMount()

頁面加載時觸發(fā),一個頁面只會調(diào)用一次,此時頁面 DOM 尚未準備好,還不能和視圖層進行交互

componentDidMount()

頁面初次渲染完成時觸發(fā),一個頁面只會調(diào)用一次,代表頁面已經(jīng)準備妥當,可以和視圖層進行交互。此生命周期可以訪問 ?getCurrentInstance().router?。此生命周期可以訪問 Taro DOM 并且更改 DOM 或添加事件,但無法通過 ?Taro.createSelectorQuery? 查找小程序 DOM。

shouldComponentUpdate(nextProps, nextState)

頁面是否需要更新,返回 false 不繼續(xù)更新,否則繼續(xù)走更新流程

componentWillUpdate(nextProps, nextState)

頁面即將更新

componentDidUpdate(prevProps, prevState)

頁面更新完畢

componentWillUnmount()

頁面卸載時觸發(fā),如 redirectTo 或 navigateBack 到其他頁面時

componentDidShow()

頁面顯示/切入前臺時觸發(fā)

componentDidHide()

頁面隱藏/切入后臺時觸發(fā), 如 navigateTo 或底部 tab 切換到其他頁面,小程序切入后臺等

在以上所有的生命周期方法中,都可以通過 ?getCurrentInstance().router.params? 獲取打開當前頁面路徑中的參數(shù)。

頁面事件處理函數(shù)

在小程序中,頁面還有在一些專屬的事件處理函數(shù),如下

onPullDownRefresh()

監(jiān)聽用戶下拉刷新事件

  • 需要在全局配置的 window 選項中或頁面配置中開啟 enablePullDownRefresh
  • 可以通過 Taro.startPullDownRefresh 觸發(fā)下拉刷新,調(diào)用后觸發(fā)下拉刷新動畫,效果與用戶手動下拉刷新一致。
  • 當處理完數(shù)據(jù)刷新后,Taro.stopPullDownRefresh 可以停止當前頁面的下拉刷新

onReachBottom()

監(jiān)聽用戶上拉觸底事件

  • 可以在全局配置的 window 選項中或頁面配置中設(shè)置觸發(fā)距離 onReachBottomDistance
  • 在觸發(fā)距離內(nèi)滑動期間,本事件只會被觸發(fā)一次

onPageScroll(Object)

監(jiān)聽用戶滑動頁面事件

Object 參數(shù)說明:

參數(shù)類型說明
scrollTopNumber頁面在垂直方向已滾動的距離(單位px)

注意:請只在需要的時候才在 page 中定義此方法,不要定義空方法。以減少不必要的事件派發(fā)對渲染層-邏輯層通信的影響。注意:請避免在 onPageScroll 中過于頻繁的執(zhí)行 this.setState() 等引起邏輯層-渲染層通信的操作。尤其是每次傳輸大量數(shù)據(jù),會影響通信耗時。

onShareAppMessage(Object)

監(jiān)聽用戶點擊頁面內(nèi)轉(zhuǎn)發(fā)按鈕(Button 組件 openType=’share’)或右上角菜單“轉(zhuǎn)發(fā)”按鈕的行為,并自定義轉(zhuǎn)發(fā)內(nèi)容。

注意:只有定義了此事件處理函數(shù),右上角菜單才會顯示“轉(zhuǎn)發(fā)”按鈕

Object 參數(shù)說明:

參數(shù)類型說明
fromString轉(zhuǎn)發(fā)事件來源。
button:頁面內(nèi)轉(zhuǎn)發(fā)按鈕;
menu:右上角轉(zhuǎn)發(fā)菜單
targetObject如果 from 值是 button,則 target 是觸發(fā)這次轉(zhuǎn)發(fā)事件的 button,否則為 undefined
webViewUrlString頁面中包含 WebView 組件時,返回當前 WebView 的url

此事件需要 return 一個 Object,用于自定義轉(zhuǎn)發(fā)內(nèi)容,返回內(nèi)容如下:

自定義轉(zhuǎn)發(fā)內(nèi)容

字段類型說明
title轉(zhuǎn)發(fā)標題當前小程序名稱
path轉(zhuǎn)發(fā)路徑當前頁面 path ,必須是以 / 開頭的完整路徑
imageUrl自定義圖片路徑,可以是本地文件路徑、代碼包文件路徑或者網(wǎng)絡(luò)圖片路徑。支持 PNG 及 JPG 。顯示圖片長寬比是 5:4使用默認截圖

示例代碼

  1. exportdefaultclassIndexextendsComponent{
  2. onShareAppMessage (res){
  3. if(res.from==='button'){
  4. // 來自頁面內(nèi)轉(zhuǎn)發(fā)按鈕
  5. console.log(res.target)
  6. }
  7. return{
  8. title:'自定義轉(zhuǎn)發(fā)標題',
  9. path:'/page/user?id=123'
  10. }
  11. }
  12. render (){
  13. return(
  14. <View className='index'>
  15. <Text>1</Text>
  16. </View>
  17. )
  18. }
  19. }

onResize(object)

只有微信小程序支持基礎(chǔ)庫 2.4.0 開始支持

小程序屏幕旋轉(zhuǎn)時觸發(fā)。詳見 響應(yīng)顯示區(qū)域變化

onTabItemTap(Object)

微信小程序中,基礎(chǔ)庫 1.9.0 開始支持

點擊 tab 時觸發(fā)

Object 參數(shù)說明:

參數(shù)類型說明
indexString被點擊 tabItem 的序號,從 0 開始
pagePathString被點擊 tabItem 的頁面路徑
textString被點擊 tabItem 的按鈕文字

componentWillPreload()

目前只有微信小程序支持

預加載鉤子

onTitleClick()

只有支付寶小程序支持,基礎(chǔ)庫 1.3.0 開始支持

點擊標題觸發(fā)

onOptionMenuClick()

只有支付寶小程序支持,基礎(chǔ)庫 1.3.0 開始支持

點擊導航欄額外圖標觸發(fā)

onPopMenuClick()

只有支付寶小程序支持,基礎(chǔ)庫 1.11.0 開始支持

暫無說明

onPullIntercept()

只有支付寶小程序支持,基礎(chǔ)庫 1.3.0 開始支持

下拉截斷時觸發(fā)

H5 暫時沒有同步實現(xiàn) onReachBottom 、 onPageScroll 這兩個事件函數(shù),可以通過給 window 綁定 scroll 事件來進行模擬,而 onPullDownRefresh 下拉刷新則暫時只能用 ScrollView 組件來代替了。

頁面事件函數(shù)各端支持程度如下

方法作用微信小程序百度小程序字節(jié)跳動小程序支付寶小程序H5RN
onPullDownRefresh頁面相關(guān)事件處理函數(shù)—監(jiān)聽用戶下拉動作??????????
onReachBottom頁面上拉觸底事件的處理函數(shù)??????????
onShareAppMessage用戶點擊右上角轉(zhuǎn)發(fā)??????????
onPageScroll頁面滾動觸發(fā)事件的處理函數(shù)??????????
onTabItemTap當前是 tab 頁時,點擊 tab 時觸發(fā)??????????
onResize頁面尺寸改變時觸發(fā),詳見 響應(yīng)顯示區(qū)域變化???????
componentWillPreload預加載???????
onTitleClick點擊標題觸發(fā)???????
onOptionMenuClick點擊導航欄額外圖標觸發(fā)?????(基礎(chǔ)庫 1.3.0)??
onPopMenuClick?????(基礎(chǔ)庫 1.3.0)??
onPullIntercept下拉截斷時觸發(fā)?????(基礎(chǔ)庫 1.11.0)??

以上成員方法在 Taro 的頁面中同樣可以使用,書寫同名方法即可,不過需要注意的,目前暫時只有小程序端支持(支持程度如上)這些方法,編譯到 H5/RN 端后這些方法均會失效。

內(nèi)置組件/Props

Taro 中使用 React,內(nèi)置組件遵循小程序組件規(guī)范,所有內(nèi)置組件都必須從 ?@tarojs/components? 引入,組件的 Props 遵從大駝峰式命名規(guī)范:

Taro

  1. import{View}from'@tarojs/components'
  2. <View hoverClass='test'/>

對應(yīng)小程序:

  1. <viewhover-class=''/>

事件

在 Taro 中事件遵從小駝峰式命名規(guī)范,所有內(nèi)置事件名以 ?on? 開頭,在事件處理函數(shù)中第一個參數(shù)是事件本身,可以通過調(diào)用 ?stopPropagation? 來阻止冒泡。

  1. functionComp(){
  2. // 只有 onClick 對應(yīng) bindtap
  3. // 其余內(nèi)置事件名
  4. function clickHandler (e){
  5. e.stopPropagation()// 阻止冒泡
  6. }
  7. function scrollHandler (){
  8. //
  9. }
  10. return<ScrollView onClick={clickHandler} onScroll={scrollHandler}/>
  11. }

其它限制

由于小程序不支持動態(tài)引入,因此小程序中無法使用 ?React.lazy? API。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號