<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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。

        提供的方法如下:

      1. setTimeout, clearTimeout
      2. setInterval, clearInterval
      3. setImmediate, clearImmediate
      4. requestAnimationFrame, cancelAnimationFrame
      5. 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久久成人免费| 一本久久综合亚洲鲁鲁五月天| 国产精品亚洲片在线va| 18禁美女黄网站色大片免费观看| 亚洲不卡中文字幕无码| a级黄色毛片免费播放视频| 亚洲精品无码MV在线观看| 免费看黄的成人APP| 亚洲精品tv久久久久久久久| 91在线视频免费观看| 亚洲va中文字幕无码久久| 日本免费在线观看| 亚洲视频免费一区| 在线观看的免费网站| 亚洲精华国产精华精华液好用| 精品免费国产一区二区三区| 亚洲a∨无码一区二区| 亚洲国产天堂久久综合| a级毛片毛片免费观看永久| 亚洲AV无码第一区二区三区| 色播精品免费小视频| 亚洲日本VA午夜在线电影| 免费a级毛片视频| 国产免费无码AV片在线观看不卡| 亚洲AV人无码综合在线观看| 91成年人免费视频| 国产91成人精品亚洲精品| 国产成人A亚洲精V品无码| 1000部禁片黄的免费看| 亚洲精品日韩一区二区小说| 亚洲中文字幕无码爆乳av中文 | 最近中文字幕大全免费版在线 | 亚洲人成亚洲精品| 成年男女免费视频网站| 特级毛片全部免费播放| 狠狠色伊人亚洲综合成人| 国产免费看JIZZ视频| 久香草视频在线观看免费| 亚洲香蕉免费有线视频| 国产亚洲精品免费|