国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

React-Native之定時器Timer的實現代碼

來源:懂視網 責編:小采 時間:2020-11-27 22:28:23
文檔

React-Native之定時器Timer的實現代碼

React-Native之定時器Timer的實現代碼:在web開發中,我們通常需要使用定時器功能,使用setTimeout和setInterval函數。 那么在ReactNative中,是否也提供了定時器的功能呢? 答案是肯定的。 我們還是先看看官網怎么說的。 定時器是一個應用中非常重要的部分。React Native實現了和瀏
推薦度:
導讀React-Native之定時器Timer的實現代碼:在web開發中,我們通常需要使用定時器功能,使用setTimeout和setInterval函數。 那么在ReactNative中,是否也提供了定時器的功能呢? 答案是肯定的。 我們還是先看看官網怎么說的。 定時器是一個應用中非常重要的部分。React Native實現了和瀏

在web開發中,我們通常需要使用定時器功能,使用setTimeout和setInterval函數。

那么在ReactNative中,是否也提供了定時器的功能呢? 答案是肯定的。

我們還是先看看官網怎么說的。

定時器是一個應用中非常重要的部分。React Native實現了和瀏覽器一致的定時器Timer。

提供的方法如下:

  • setTimeout, clearTimeout
  • setInterval, clearInterval
  • setImmediate, clearImmediate
  • requestAnimationFrame, cancelAnimationFrame
  • setTimeout (fn, 1000)  和 setInterval (fn,1000)

    和web中的意思一樣,前者表示延遲1000毫秒后執行 fn 方法 ,后者表示每隔1000毫秒執行 fn 方法。

    requestAnimationFrame(fn)和setTimeout(fn, 0)不同,前者會在每幀刷新之后執行一次,而后者則會盡可能快的執行(在iPhone5S上有可能每秒1000次以上)。

    setImmediate則會在當前JavaScript執行塊結束的時候執行,就在將要發送批量響應數據到原生之前。注意如果你在setImmediate的回調函數中又執行了setImmediate,它會緊接著立刻執行,而不會在調用之前等待原生代碼。

    Promise的實現就使用了setImmediate來執行異步調用。

    InteractionManager(交互管理器)

    原生應用感覺如此流暢的一個重要原因就是在互動和動畫的過程中避免繁重的操作。在React Native里,我們目前受到限制,因為我們只有一個JavaScript執行線程。不過你可以用InteractionManager來確保在執行繁重工作之前所有的交互和動畫都已經處理完畢。

    應用可以通過以下代碼來安排一個任務,使其在交互結束之后執行:

    InteractionManager.runAfterInteractions(() => { 
     // ...需要長時間同步執行的任務... 
    }); 

    我們來把它和之前的幾個任務安排方法對比一下:

    requestAnimationFrame(): 用來執行在一段時間內控制視圖動畫的代碼

    setImmediate/setTimeout/setInterval(): 在稍后執行代碼。注意這有可能會延遲當前正在進行的動畫。

    runAfterInteractions(): 在稍后執行代碼,不會延遲當前進行的動畫。
    觸摸處理系統會把一個或多個進行中的觸摸操作認定為'交互',并且會將runAfterInteractions()的回調函數延遲執行,直到所有的觸摸操作都結束或取消了。

    InteractionManager還允許應用注冊動畫,在動畫開始時創建一個交互“句柄”,然后在結束的時候清除它。

    var handle = InteractionManager.createInteractionHandle(); 
    // 執行動畫... (`runAfterInteractions`中的任務現在開始排隊等候) 
    // 在動畫完成之后 
    InteractionManager.clearInteractionHandle(handle); 
    // 在所有句柄都清除之后,現在開始依序執行隊列中的任務 

    TimerMixin

    我們發現很多React Native應用發生致命錯誤(閃退)是與計時器有關。具體來說,是在某個組件被卸載(unmount)之后,計時器卻仍然被激活。為了解決這個問題,我們引入了TimerMixin。如果你在組件中引入TimerMixin,就可以把你原本的setTimeout(fn, 500)改為this.setTimeout(fn, 500)(只需要在前面加上this.),然后當你的組件卸載時,所有的計時器事件也會被正確的清除。

    這個庫并沒有跟著React Native一起發布。你需要在項目文件夾下輸入npm i react-timer-mixin --save來單獨安裝它。

    var TimerMixin = require('react-timer-mixin'); 
     
    var Component = React.createClass({ 
     mixins: [TimerMixin], 
     componentDidMount: function() { 
     this.setTimeout( 
     () => { console.log('這樣我就不會導致內存泄露!'); }, 
     500 
     ); 
     } 
    }); 

    我們強烈建議您使用react-timer-mixin提供的this.setTimeout(...)來代替setTimeout(...)。這可以規避許多難以排查的BUG。

    譯注:Mixin屬于ES5語法,對于ES6代碼來說,無法直接使用Mixin。

    如果你的項目是用ES6代碼編寫,同時又使用了計時器,那么你只需銘記在unmount組件時清除(clearTimeout/clearInterval)所有用到的定時器。

    那么也可以實現和TimerMixin同樣的效果。例如:

    import React,{ 
     Component 
    } from 'react-native'; 
     
     
    export default class Hello extends Component { 
     componentDidMount() { 
     this.timer = setTimeout( 
     () => { console.log('把一個定時器的引用掛在this上'); }, 
     500 
     ); 
     } 
     componentWillUnmount() { 
     // 如果存在this.timer,則使用clearTimeout清空。 
     // 如果你使用多個timer,那么用多個變量,或者用個數組來保存引用,然后逐個clear 
     this.timer && clearTimeout(this.timer); 
     } 
    }; 
    
    

    注意點:

    1、定時器功能比較簡單,注意在es6中使用時,需銘記在unmount組件時清除(clearTimeout/clearInterval)所有用到的定時器。
    2、可以使用定時器實現一些普通功能:如短信倒計時等
    3、對于一些需要延遲執行的特殊場景也可以使用Timer,譬如:目前RN提供的fetch是沒有提供設置超時時間的,如果客戶端請求后端的一個接口,接口超時了(后端服務設置的超時時間為10s),那么RN界面就一直loading,也不能aborded。那么這時候我們就可以巧妙的使用計時器,如果客戶端發出的Request,時間大于某個值(5秒),那么我們直接認為請求失敗。
    4、今天還發現一個使用setTimeout的場景,在列表頁加載下一頁的時候,如果接口響應很快,就不會出現loading的效果,這個時候為了有loading的效果,設置一個500毫秒的延時,呵呵....

    參考:http://reactnative.cn/docs/0.31/timers.html#content

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    React-Native之定時器Timer的實現代碼

    React-Native之定時器Timer的實現代碼:在web開發中,我們通常需要使用定時器功能,使用setTimeout和setInterval函數。 那么在ReactNative中,是否也提供了定時器的功能呢? 答案是肯定的。 我們還是先看看官網怎么說的。 定時器是一個應用中非常重要的部分。React Native實現了和瀏
    推薦度:
    標簽: 計時器 代碼 React
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 免费观看国产 | 在线观看欧美一区 | 91亚洲国产成人久久精品网站 | 免费永久在线观看黄网 | 亚洲欧美日韩第一页 | 久久国产香蕉视频 | 人人草人人澡 | 精品1区2区3区 | 国产视频播放 | 日韩电影在线 | 亚洲欧美日韩高清一区二区三区 | 亚洲国产精品一区二区九九 | 久久精品国产免费一区 | 国产精品资源在线播放 | 欧美日韩国产一区二区三区在线观看 | 青青国产成人久久91网站站 | 国产成人99久久亚洲综合精品 | 日韩在线免费视频 | 国产精选视频 | 影音先锋亚洲资源 | 国产精品久久久久久久专区 | 国产精品成久久久久三级 | 国产精品高清久久久久久久 | 欧美a区| 欧美国产第一页 | 国产精品成人久久久久 | 国产日韩高清一区二区三区 | 超在线视频 | 亚洲看片 | 欧美日韩一本 | 91久久精品国产91久久性色也 | 一道本一区二区三区 | 在线观看视频国产 | 国产精品资源在线观看 | wwww欧美| 激情午夜婷婷 | 99999久久久久久亚洲 | 国产精品久久久久久久久久久久 | 亚洲欧美网站 | 国产 欧美 在线 | 欧美在线日韩 |