• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      ReactNative之基于引用共享組件開發(fā)實踐

      2020-07-23 06:58:56黃磊盧方偉肖偉
      視界觀·上半月 2020年7期
      關鍵詞:跨平臺

      黃磊 盧方偉 肖偉

      摘? ? 要:React原生組件機制,并提出基于ReactNative跨平臺組件開發(fā)規(guī)范的,將組件映射到相同的原生引用對象,實現(xiàn)同地址的組件的共享。

      關鍵詞:共享組件;ReactNatve;狀態(tài)管理;混合開發(fā);組件引用;跨平臺

      引言

      隨著移動互聯(lián)網(wǎng)的快速發(fā)展,尤其是智能手機設備硬件的更新?lián)Q代,用戶的體驗和層次的魚龍混雜,讓手機端開發(fā)者和平臺大大增加了開發(fā)成本。實現(xiàn)同樣的功能,因此保證開發(fā)成本和體驗的一致性變成了一個核心點,本文著重講述基于ReactNative跨平臺基礎上,解決多個組件之間的內(nèi)存共享問題,從根本上提升App體驗。

      一 RN介紹

      React Native(以下簡稱RN)是由Facebook公司2015年推出的開源的跨平臺移動應用開發(fā)框架,可以實現(xiàn)基于JS開發(fā)應用,并可同時運行于IOS端和安卓端兩大主流的手機操作系統(tǒng),真正實現(xiàn)了一次編碼,多平臺運行,RN最終編譯成的是一個真正的移動應用。RN所使用的基礎UI組件和原生是完全一致,JS在其中的作用就是跟原生UI關聯(lián)起來,從而生產(chǎn)出整個App的業(yè)務邏輯。

      二 組件原理

      RN框架主要分三層,原生層、通信層、業(yè)務層,原生層主要提供了UI渲染器控制器以及一些其他的基礎功能庫,均被封裝成RN模塊、注冊、橋等。通信層主要執(zhí)行原生與JS的通信工作。業(yè)務層主要實現(xiàn)的是跟業(yè)務相關的組件和工具庫使用,通過JS編寫的虛擬Dom來構建模塊和組件,虛擬Dom是內(nèi)存中的一種輕量級表現(xiàn)形式,可以通過不同的渲染引擎生成具有一致性的UI。并且借助React的狀態(tài)管理特性,對原生UI的屬性和邏輯進行更新。

      三 組件共享原理

      RN組件分為JS組件和原生組件,普通的RN組件并沒有存在組件共享問題,但由于RN的組件的狀態(tài)管理都有UI控制器控制器管理,原生的布局控制已經(jīng)完全被接管,所以原則上是不能通過原生方法去改變組件的布局,所有的邏輯都要在JS端完成。目前開放的所有RN組件并沒有提供真正的Native共享功能,現(xiàn)有的開發(fā)者開源的共享組件方案也并非是真實組件共享,只是基于同一個虛擬Dom的原生組件復制,映射到內(nèi)存地址是完全不同的兩個Native對象,并非真正意義上的同一個對象,也可以說是同引用(內(nèi)存中同一地址)。

      四 共享組件實現(xiàn)

      在RN框架基礎上,遵循RN的組件開發(fā)規(guī)范,我們將創(chuàng)建一個原生組件,這個原生組件既是源組件也是鏡像組件。這個組件具有兩個特殊屬性源標記和目標標記,在觸發(fā)共享時這兩個標記要必須相同,它們是共享的一個橋梁。在Native端有一個臨時的存儲對象,當觸發(fā)共享時,源組件對象會被臨時存儲到存儲中,當鏡像組件開始渲染時會將源組件對象從存儲中取出,并且放置到鏡像組件中作為子組件。雖然作為鏡像組件的子組件,它的狀態(tài)管理卻不能被鏡像組件所接管,它還是由源組件所控制,所以要通過鏡像組件的狀態(tài)管理通過JS再傳給源組件,源組件去動態(tài)更改源組件對象的狀態(tài)和尺寸。

      我們將創(chuàng)建3個原生類文件,分別是模塊管理、組件管理器、原生組件,兩個JS的React原生組件(源組件和鏡像組件),模塊管理主要負責擴展RN組件或者模塊的控制管理,組件管理是對Native和JS端的屬性、方法、通信、事件等統(tǒng)一管理,原生組件則是基于RN組件的原生View。模塊管理主要用于RN擴展庫管理,組件管理器會創(chuàng)建真實的View實例,組件類主要用于組件的實體UI部分,其中會處理原生組件的具體功能,包含組件對象掛起以及放置。JS端當源組件設置源的時候,即將源組件的視圖置為掛起狀態(tài),原生組件則體現(xiàn)為將View臨時存儲到存儲中。當鏡像組件尺寸需要發(fā)生變化時,能夠同步尺寸給源組件,然后通過源的控制器去控制View的尺寸變化。

      五 組件使用

      基于RN的三方視頻組件并不能很好的支持全屏,或者說不能自定義全屏,在自定義播放器UI后,全屏模式并不能展示我自定義的UI組件,例如控制進度條、彈幕、分享、評論等。再如WebView早期的版本并沒有全屏的支持,IOS本身目前版本也沒有支持,利用共享組件就可以創(chuàng)建一個全屏鏡像組件,就將WebView共享為全屏狀態(tài)。而且在鏡像組件中我們可以處理屏幕旋轉,以及組件位置的更換。

      源組件實現(xiàn)代碼部分,點擊掛起源組件,在執(zhí)行掛起操作的同時生成一個唯一的源,可將這個唯一的源攜帶到任何一個組件作為源。當鏡像組件渲染時源組件的View就會自動將源組件的View添加作為子View展示出來,當鏡像組件釋放時會觸發(fā)Native共享組件的釋放,同時會將鏡像原生組件的子View重新恢復到源組件中,這樣就同步了RN的生命周期。

      六 結論

      RN現(xiàn)在是最火的跨平臺框架之一,但是還是有很多未解決的問題。這就是這篇文章的價值所在。以上就是基于引用的共享組件實現(xiàn)過程,我們已經(jīng)將這個共享組件實際應用于項目中?;谝玫墓蚕斫M件簡單但是不平凡,它的作用大大的超過了代碼量本身,它是滄海一粟但是卻是眾多組件的一個亮點。

      參考文獻:

      [1]焦鋒.react native在app開發(fā)中的應用研究[J].數(shù)字技術與應用,2017(06):109.

      [2]嚴新巧.基于移動開發(fā)現(xiàn)狀探討React Native[J].電腦知識與技術,2016,12(32):76-77+82.

      [3]周雪.現(xiàn)代跨平臺開發(fā)技術在移動終端層面的應用.現(xiàn)代工業(yè)經(jīng)濟和信息化,2019,9(1):73-74.

      [4]趙林靜.跨平臺移動應用開發(fā)的優(yōu)勢與不足.信息與電腦,2018(9):123-124.

      [5]張龍,張晗.跨平臺響應式前端框架技術的研究與應用.電子設計工程,2018,26(22):6-9.

      [6]王欣,曲萍.移動互聯(lián)網(wǎng)混合開發(fā)技術的方向.科技資訊,2018,16(1):8-8.

      猜你喜歡
      跨平臺
      跨層級網(wǎng)絡、跨架構、跨平臺的數(shù)據(jù)共享交換關鍵技術研究與系統(tǒng)建設
      一款游戲怎么掙到全平臺的錢?
      電腦報(2021年11期)2021-07-01 08:10:05
      潛力雙跨平臺:進階:誰將跨入下一個“十大”?
      跨平臺APEX接口組件的設計與實現(xiàn)
      測控技術(2018年9期)2018-11-25 07:44:58
      基于C++語言的跨平臺軟件開發(fā)的設計
      基于C++語言的跨平臺軟件開發(fā)
      移動互聯(lián)網(wǎng)應用跨平臺開發(fā)
      一種虛擬現(xiàn)實應用程序跨平臺方法的研究
      基于QT的跨平臺輸電鐵塔監(jiān)控終端軟件設計與實現(xiàn)
      基于OPC跨平臺通信的電機監(jiān)測與診斷系統(tǒng)
      宜丰县| 贡山| 唐山市| 仁寿县| 习水县| 龙门县| 永济市| 通城县| 阿城市| 淮滨县| 红安县| 南部县| 吴川市| 迁安市| 高尔夫| 江津市| 瑞安市| 天全县| 涞水县| 师宗县| 洪洞县| 沙雅县| 安徽省| 自贡市| 平乡县| 安义县| 丹江口市| 十堰市| 江陵县| 咸阳市| 晋江市| 辛集市| 长武县| 丹巴县| 吉林市| 华容县| 灵石县| 犍为县| 隆德县| 哈密市| 武邑县|