abstract:React 起源于 Facebook 的內(nèi)部項(xiàng)目,因?yàn)樵摴緦?duì)市場(chǎng)上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來(lái)架設(shè) Instagram 的網(wǎng)站。做出來(lái)以后,發(fā)現(xiàn)這套東西很好用,就在2013年5月開源了。這個(gè)項(xiàng)目本身也越滾越大,從最早的UI引擎變成了一整套前后端通吃的 Web App 解決方案。衍生的 React Native 項(xiàng)目,目標(biāo)
React 起源于 Facebook 的內(nèi)部項(xiàng)目,因?yàn)樵摴緦?duì)市場(chǎng)上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來(lái)架設(shè) Instagram 的網(wǎng)站。做出來(lái)以后,發(fā)現(xiàn)這套東西很好用,就在2013年5月開源了。
這個(gè)項(xiàng)目本身也越滾越大,從最早的UI引擎變成了一整套前后端通吃的 Web App 解決方案。衍生的 React Native 項(xiàng)目,目標(biāo)更是宏偉,希望用寫 Web App 的方式去寫 Native App。
React Native 一經(jīng)推出,就獲得眾多開發(fā)者的關(guān)注。React Native 使得 JavaScript 能夠開發(fā)真正的 APP, 它不僅有著與原生應(yīng)用相媲美的體驗(yàn),同時(shí)擁有著 Web 應(yīng)用的優(yōu)勢(shì)和開發(fā)效率。React Native 鮮明的特點(diǎn)就是組件化,一個(gè)應(yīng)用都是多個(gè)組件構(gòu)成;同時(shí)為了更高的效率,React Native 采用了內(nèi)存 Dom tree Diff 計(jì)算,優(yōu)化了 view 的渲染效率和體驗(yàn)。使用 JavaScript 開發(fā)跨終端的應(yīng)用是未來(lái)的趨勢(shì)。
那么,現(xiàn)在使用 React Native 開發(fā)能給開發(fā)者帶去哪些便利,又會(huì)遇到哪些坑呢,又該在什么場(chǎng)景選擇 React Native 呢?這篇文章整理了一些我們高手問(wèn)答欄目中的相關(guān)問(wèn)答內(nèi)容以解決大家的疑惑。歡迎各位一起討論、交流、學(xué)習(xí)。
一、React Native 相關(guān)特性——首先來(lái)了解一下 React Native 的一些特性
React-Native是在React的基礎(chǔ)上設(shè)計(jì)的(也許描述得不對(duì)),對(duì)于前端來(lái)說(shuō),純業(yè)務(wù)組建(不涉及UI,僅僅是邏輯)能否在iOS,Android,Web上共享?從官方的視頻看到,React Native提倡的是 Learn once, Write anywhere,這不是是預(yù)示著多個(gè)平臺(tái)還得每個(gè)寫一遍,不知道共享度能有多少?
你說(shuō)的很對(duì),React-Native是React基礎(chǔ)上設(shè)計(jì)的,這是當(dāng)時(shí)Facebook兩個(gè)團(tuán)隊(duì)做的事情,ReactJS先出來(lái)的。如果是語(yǔ)法層面,不設(shè)計(jì)UI,是可以共享的。
React-Native請(qǐng)問(wèn)是基于什么設(shè)計(jì)模式開發(fā)的?
設(shè)計(jì)模式硬套倒也想不出,基本3個(gè)層面:(1)語(yǔ)言層面:JS & JSX,這個(gè)對(duì)前端人員比較熟悉。(2)核心層面:使用Javascript內(nèi)核引擎 + OC原生組件 (3)使用組件開發(fā)APP,就像搭積木一樣。
Dom tree Diff 是什么? 具體是怎么運(yùn)算的呢? 尤其是提高效率上。
舉個(gè)栗子:以前我們需要給一個(gè)評(píng)論點(diǎn)贊,需要更新該評(píng)論下的贊,贊的用戶昵稱信息,我們暫且叫做視圖重渲染吧,比如使用jquery, $('#container').empty().....render()。那么react做了一件什么事呢?react構(gòu)建的是虛擬的dom,通過(guò)內(nèi)部屬性的改變通知虛擬dom進(jìn)行內(nèi)存計(jì)算(與舊屬性的虛擬dom進(jìn)行一次比較,即diff),將計(jì)算后的結(jié)果直接更新在界面上,不要我們手動(dòng)管理視圖。內(nèi)存換效率。具體的可以看下這篇文章https://facebook.github.io/react/docs/glossary.html
既然原生上面有一層虛擬DOM,那按道理應(yīng)該可以做到根據(jù)一套JS在不同的環(huán)境下渲染不同的原生代碼,實(shí)現(xiàn)1次編寫處處運(yùn)行。而且Native是需要編譯的吧,那它應(yīng)該做不到H5那種的實(shí)時(shí)更新。還有一點(diǎn),這層虛擬DOM能做到一套View同時(shí)渲染W(wǎng)eb和Native兩套界面嗎?
是這樣的,因?yàn)閕OS和Android有各自不同風(fēng)格的控件,有的區(qū)別很大,所以React-Native提供了Platform可以判斷當(dāng)前系統(tǒng)是Android還是iOS,然后渲染什么樣的UI,這些可以寫在一套js代碼里,熱更新不需要編譯,React-Native有一個(gè)bundle命令,打包出來(lái)的bundle文件是可以直接被加載的,不需要編譯。 如果想一套View渲染W(wǎng)eb和App的話,UI部分的代碼是不一樣的,這個(gè)可以看React的文檔和React-Native的文檔,render渲染的JSX部分代碼不一樣。
既然Web的view和Native的view無(wú)法公用,那在Web上弄一層shadow-dom有什么意義?僅僅為了實(shí)現(xiàn)diff算法嗎?React確實(shí)我沒(méi)深入了解過(guò),寫NG比較多,感覺(jué)寫React很繁瑣
虛擬DOM主要是解決Web的一個(gè)性能瓶頸問(wèn)題,類似cordova之類的跨平臺(tái)解決方案性能瓶頸就在DOM上,虛擬DOM就是當(dāng)DOM有更改的時(shí)候在進(jìn)行DOM渲染,可以有效地減少DOM渲染次數(shù),解決這個(gè)性能問(wèn)題。NG更適合單頁(yè)的web app或者說(shuō)H5在native部分。
問(wèn)下兩個(gè)問(wèn)題 1).React Native當(dāng)初宣傳的時(shí)候說(shuō)的是 一次學(xué)習(xí),處處編寫。為什么React Native不是那種傳統(tǒng)的一次編寫,處處運(yùn)行。 2)Native和Web端的React有聯(lián)系嗎?
React-native是從React發(fā)展而來(lái)的,最大的優(yōu)勢(shì)就是既有Web的熱更新優(yōu)勢(shì),又有接近Native的性能,核心思想是虛擬DOM,所以針對(duì)不同的平臺(tái)編寫不同的JS,實(shí)際上底層調(diào)用的還是原生控件,所以是一次學(xué)習(xí)處處編寫而不是一次編寫處處運(yùn)行。 Native和Web端的react是有聯(lián)系的。
React Native 組件的屬性和方法夠多夠靈活嗎?
目前React-Native的第三方庫(kù)還不是很豐富,需要oc的支持和暴露,當(dāng)然這只是目前。組件的方法不是很多,但是很好的處理了一個(gè)UI組件的渲染生命周期,足以控制組件;組件可以自定義和擴(kuò)展,所以屬性是可以靈活使用。具體的可以關(guān)注3個(gè)比較重要的屬性:props、state、ref
二、入門相關(guān)——接下來(lái),看一看 React Native 的相關(guān)學(xué)習(xí)資料
React Native學(xué)習(xí)成本如何,如何快速使用?
學(xué)習(xí)成本不算太高,我之前從來(lái)沒(méi)做過(guò)Web開發(fā),沒(méi)接觸過(guò)JS,也能入個(gè)手寫一寫,參考這篇小博文,入手會(huì)比較快:http://richard-cao.github.io/
入門學(xué)習(xí)也可以參考: https://github.com/xujinyang/react-native-android-guidehttps://github.com/jondot/awesome-react-native https://github.com/ele828/react-native-guide
相關(guān)入門資料推薦
干貨:https://github.com/xujinyang/react-native-android-guide
https://github.com/LeoMobileDeveloper/ReactNativeMaterials
Redux的資料: https://github.com/xgrommx/awesome-redux
這個(gè)需要什么基礎(chǔ)?還有就是以后的發(fā)展您是怎么看的?會(huì)代替原生還是和原生相輔相成?
(1)基礎(chǔ):前端基礎(chǔ),例如:JS、JSX、Flexbox以及熟悉iOS的組件即可。
(2)前景:現(xiàn)在最大的優(yōu)勢(shì)就是熱更新;對(duì)于需要及時(shí)更新的部分,可以采用React-Native
(3)目前:相輔相成;未來(lái)的話,我希望更多是大部分替代原生。
用React Native 開發(fā)APP需要掌握其他哪些技能,除了React Native部分
會(huì)一些JS是最好的,掌握一些ES6語(yǔ)法之類的。
三、適用場(chǎng)景相關(guān)——技術(shù)總是脫離不了使用場(chǎng)景的
RN目前在項(xiàng)目實(shí)踐中已知的坑有哪些?假如新開發(fā)一個(gè)項(xiàng)目,完全使用RN是否可行?另外想了解一下您在項(xiàng)目中使用的程度和場(chǎng)景,謝謝!
不太建議完全使用RN,因?yàn)镕acebook也在不斷填坑,每個(gè)月都有新版本,一個(gè)長(zhǎng)期項(xiàng)目經(jīng)不起頻繁換依賴庫(kù)的版本;我們公司也只是作為業(yè)余研究性質(zhì),不過(guò)RN的熱更新思路真心不錯(cuò),可以隨時(shí)更換功能模塊。需要注意的是,熱更新和在線更新是不一樣的,分別對(duì)應(yīng)的是 hot-reloading 和 reload,調(diào)試時(shí)是通過(guò) hot 選項(xiàng)控制;鑒于 hot-reloading 需要和服務(wù)器實(shí)時(shí)保持一個(gè)socket長(zhǎng)連接和既有的不確定性,我不相信會(huì)有公司會(huì)采用 hot-reloading 的方案,應(yīng)用于生產(chǎn)環(huán)境。如果真的應(yīng)用hot-reloading了,那就分享下心得唄。
目前使用React-Native有那些局限,React-Native更適合開發(fā)那些應(yīng)用?
React-Native還是有些坑需要踩的,現(xiàn)在Github上也能看到Recat-Native源碼庫(kù)都有不少開發(fā)者在提bug,更新的也很快。目前React-Native做一些內(nèi)部APP還是可以的;目前對(duì)動(dòng)畫的支持不是很高,這個(gè)可以在一些APP中做一些優(yōu)雅降級(jí);更適合開發(fā)那些動(dòng)畫效果要求不是忒高、組件功能要求相對(duì)較少(如果團(tuán)隊(duì)中有OC的開發(fā)者可以忽略)的APP。很多坑,我們團(tuán)隊(duì)現(xiàn)在都在踩。
請(qǐng)問(wèn)React-Native的目前推廣和應(yīng)用局限性有哪些?
React-Native技術(shù)的推廣可以從公司內(nèi)存APP試水;邊踩坑邊開發(fā),React-Native的局限性除了平臺(tái)因素,就是對(duì)開發(fā)者要求較高。當(dāng)然開發(fā)效率來(lái)說(shuō),應(yīng)該是很快的。如果團(tuán)隊(duì)中有Object-C成員,相對(duì)而言,上手就會(huì)輕松很多。
現(xiàn)在互聯(lián)網(wǎng)公司開發(fā)一個(gè)新的移動(dòng)APP,是不是建議使用React-Native
不一定,React-Native是可以減少一些開發(fā)成本,但是目前React-Native Android還有很多不完善的地方,目前比較適合做偏UI方面相對(duì)簡(jiǎn)單的一些需求和功能 。
四、React Native 與其他開發(fā)工具、方式對(duì)比
想知道,這個(gè)與 Phonegap 的比較,包括開發(fā)效率,學(xué)習(xí)曲線,用戶體驗(yàn),工具的完善程度等。
Phonegap 和 React-Native 還是不同。React-Native 內(nèi)部在 iOS7 版本以上采用的是JS Core Engine 解析的,在版本上是降級(jí)使用 WebView。React-Native 針對(duì)前端開發(fā)者上手難度應(yīng)該不是很大,主要熟悉Flexbox布局、JSX語(yǔ)法、React-Native API。
這個(gè)同跨平臺(tái)開源的.NET + C#開發(fā)通吃平臺(tái)的APP相比,差距在哪里呢?
你說(shuō)的應(yīng)該是指Xamarin吧,這個(gè)我有嘗鮮過(guò),收費(fèi)的商業(yè)解決方案,我感覺(jué)是主要依賴官方提供的控件和庫(kù),React-Native相對(duì)學(xué)習(xí)成本沒(méi)那么高,畢竟現(xiàn)在做C#的相對(duì)小眾,React-Native沒(méi)提供的原生控件你可以通過(guò)它提供的擴(kuò)展來(lái)自行擴(kuò)展,開源而且社區(qū)相當(dāng)活躍,我認(rèn)為前景很廣闊,個(gè)人認(rèn)為要比Xamarin好,性能方面沒(méi)對(duì)比過(guò),因?yàn)槲覜](méi)買Xamarin的方案。
能從學(xué)習(xí)周期、開發(fā)難度、運(yùn)行速度方面分析下,AngularJS和React Native的差異嗎?
對(duì)我個(gè)人來(lái)說(shuō),我是一個(gè)Android開發(fā)者,之前沒(méi)接觸過(guò)Web和JS,Angular我也有看過(guò),Angular學(xué)習(xí)成本我認(rèn)為比React高,做APP方面的就是ionic,React是個(gè)純UI的東西,React-Native也是,然后提供了和原生APP的擴(kuò)展模塊,開發(fā)周期我感覺(jué)對(duì)于我來(lái)說(shuō)肯定是React比較快,運(yùn)行速度方面React-Native是要?jiǎng)儆趇onic的。
React-Native開發(fā)出來(lái)的APP和原生的APP的性能有區(qū)別嗎,React Native做出來(lái)的安卓APP是不是沒(méi)有原生的流暢?。?/p>
React-Native開發(fā)效率高于Native;React-Native效率和體驗(yàn)高于Hybird;React-Native整體性能跟Native差距不大。Facebook給出的性能測(cè)試是接近原生的性能,如果不是很復(fù)雜的APP,看不出什么差別,但是如果相對(duì)復(fù)雜的動(dòng)畫UI之類的,那肯定還是原生更勝一籌。不過(guò)如果只是開發(fā)一個(gè)功能性APP的話基本沒(méi)啥大差別了,畢竟現(xiàn)在的Android手機(jī)性能也很好。
用這個(gè)你覺(jué)得在與我們這幫原生Android App工程師的競(jìng)爭(zhēng)中,你們最大的技術(shù)優(yōu)勢(shì)是什么,對(duì)比原生,你們的劣勢(shì)有在何處?
最大的技術(shù)優(yōu)勢(shì):iOS和Android可以一定程度上的代碼公用,減少開發(fā)成本和開發(fā)周期,可以隨時(shí)線上熱更新。 和原生相比的劣勢(shì):目前React-Native Android不適合做相對(duì)復(fù)雜的動(dòng)畫效果和UI,體驗(yàn)上會(huì)有一些問(wèn)題,而且熱更新只是針對(duì)純React的模塊,和原生交互的會(huì)有原生代碼,熱更新就不好用了。目前我感覺(jué)最好的方式還是原生+React的混合開發(fā),根據(jù)需求做技術(shù)選型。
我們目前在用國(guó)內(nèi)的APICloud來(lái)做移動(dòng)端的開發(fā)!我感覺(jué)React-Native這個(gè)東西相應(yīng)該沒(méi)有APICloud方便吧!還有React-Native和Phonegap應(yīng)該差不多的吧?
React-Native和Phonegap差很多,React-Native性能接近Native的性能是因?yàn)镽eact核心是虛擬DOM,通過(guò)diff算法來(lái)進(jìn)行有效的DOM更新,從而突破Web的DOM性能瓶頸。Phonegap,也就是現(xiàn)在的開源方案cordova,它做出來(lái)是Hybrid,RN做出來(lái)是Native,性能是最大差別,不過(guò)如果你的是資訊類應(yīng)用,不計(jì)較性能,團(tuán)隊(duì)又多Web開發(fā)人員也不妨考慮cordova。還有你說(shuō)的APICloud,實(shí)際上是給原生APP套了個(gè)WebView殼,尤其在Android上會(huì)有性能問(wèn)題。
我感覺(jué)最好的方式還是原生開發(fā),雖然需要的精力多了些但最終是值的,你說(shuō)呢?
這個(gè)就看產(chǎn)品和需求怎么定了,技術(shù)選型往往都是跟著產(chǎn)品和需求跑,畢竟技術(shù)是服務(wù)用戶的嘛,我覺(jué)得互惠互利吧。
另外Swift開源后,將來(lái)有可能第三方機(jī)構(gòu)開發(fā)出Siwft可以同時(shí)構(gòu)建iOS APP的平臺(tái),所以我感覺(jué)還是學(xué)好Java和Swift比較好一些,混合開發(fā)也許以后會(huì)好一點(diǎn),但目前很長(zhǎng)一段時(shí)間和原生開發(fā)還是要差不少吧。
你要說(shuō)的是Swift同時(shí)構(gòu)建Android APP吧?不排除這種可能,不過(guò)目前混合開發(fā)還是比較主流的,畢竟BAT和其他一線二線互聯(lián)網(wǎng)公司都在用,Web和原生結(jié)合可以解決很多產(chǎn)品需求上的問(wèn)題。
相比其他移動(dòng)開發(fā),它的優(yōu)勢(shì)是什么?
RN的優(yōu)勢(shì)在于性能與靈活性的平衡,比Hybrid好的性能,熱更新有比Native好的靈活性??焖僮龀鰳I(yè)務(wù)邏輯和UI 基本一致 、性能介于原生和混合的APP。
五、入坑之后,就要不斷的填坑——看看各位使用React Native 時(shí)遇到的問(wèn)題
React-Native 和 React 的代碼可以復(fù)用嗎?
目前我們團(tuán)隊(duì)也在做這件事,想要完全的復(fù)用還是很難的。需要做就是將一個(gè)方向打通,比如React轉(zhuǎn)Native。那么就會(huì)遇到如需要將div、img等封裝成React-Native的View、Image組件;同時(shí)css樣式的改變和css-layout的打通也是比較耗時(shí)的工作。后期,我會(huì)在大會(huì)上分享我們團(tuán)隊(duì)正在做的這件事。
還有就是動(dòng)畫這塊,因?yàn)樵挠泻芏嗫蚣埽踔量梢杂胦pengl,那React-Native有望做到嗎?你說(shuō)的執(zhí)行的是打包完成的JS文件。那提交到Appstore以后,怎么來(lái)熱跟新?覆蓋掉以前的JS文件嗎?蘋果現(xiàn)在支持應(yīng)用可以這樣了嗎?
你把JS Bundle文件改成線上拉即可。因?yàn)镽eact-native本身就存在OC的代碼,審核是可以通過(guò)的。React-Native提供了transform;當(dāng)然比如頁(yè)面的切換的動(dòng)畫也是支持的;同時(shí)有些效果可以在Webview中使用Canvas。
請(qǐng)教一下,在開發(fā)模式下能否將轉(zhuǎn)換的JS直接打包到APK中而不用Reload,另外可以說(shuō)說(shuō)你對(duì)訪問(wèn)外網(wǎng)JS的想法嗎?
直接將JS打包不用reload是可以的,但是開發(fā)模式下這么做會(huì)比較麻煩。訪問(wèn)外網(wǎng)JS我感覺(jué)可能會(huì)有一些安全性方面問(wèn)題,其他的還好
我在學(xué)習(xí)React-Native,現(xiàn)在要用post或者get請(qǐng)求和服務(wù)器進(jìn)行交互,怎么做?有沒(méi)有一些demo?
查看官方文檔:https://facebook.github.io/react-native/docs/network.html#content,講的很清楚了,用法比較簡(jiǎn)單
最近在學(xué)習(xí)React Native,開發(fā)過(guò)程中難免會(huì)涉及到與原生頁(yè)面進(jìn)行調(diào)用和傳值。請(qǐng)問(wèn)如何實(shí)現(xiàn)。是否有開源demo參考?
https://facebook.github.io/react-native/docs/native-modules-android.html#content 請(qǐng)參考這個(gè),還是不難的,我做的這個(gè)小模塊就用到了
看了OC-JS的通訊原理,發(fā)現(xiàn)是他們之間的通訊是單向的,只能OC調(diào)用JS。那事件是如何轉(zhuǎn)化的呢?比如:在JS中使用window.setTimeout()設(shè)置定時(shí)觸發(fā)事件,那這個(gè)事件是轉(zhuǎn)化成OC的定時(shí)觸發(fā)事件,然后等待OC來(lái)執(zhí)行嗎?
React-Native中內(nèi)置了JS引擎;低版本系統(tǒng)降級(jí)的是采用Webview。
是啊。但是既然是調(diào)用原生控件,那這個(gè)控件就是在OC層繪制出來(lái)的,能綁定的事件是不是應(yīng)該也只有OC的事件?像一點(diǎn)點(diǎn)擊事件之類的,是在OC層觸發(fā),還是在JS層觸發(fā)呢? 在iOS7以上版本,先不考慮使用WebView的情況。
嗯嗯,iOS7以上可以嘗試React-Native
對(duì)于RN我一直很擔(dān)心就是國(guó)內(nèi)的一些第三方服務(wù)的支持情況?如果都需要iOS和Android對(duì)于它們官方的SDK進(jìn)行封裝的話工作量就太大了?你們是否使用了相關(guān)的服務(wù):比如支付、登錄等。
對(duì)于微信、QQ、支付寶等都已經(jīng)有開源封裝,隨著RN的推進(jìn),以后會(huì)有更多第三方服務(wù)的封裝,我們用過(guò)微信和支付寶的,推薦一下:https://github.com/reactnativecn/react-native-wx https://github.com/huangzuizui/rn-alipay
我在華為6P上構(gòu)建各種紅屏,開avd各種正常,這是什么原因?
紅屏是因?yàn)閎undle問(wèn)題吧,如果是debug狀態(tài),你要監(jiān)聽電腦本地的node server8081端口,來(lái)reload js代碼;如果是release的話,要先用react-native bundle命令打出bundle,然后一起打包成apk
Android機(jī)上使用React Native占用內(nèi)存情況如何?有出現(xiàn)內(nèi)存溢出的可能么?你用的是模擬器,還是真實(shí)Android系統(tǒng)?Android 5.0?
我在我的測(cè)試機(jī)上沒(méi)出現(xiàn)過(guò)內(nèi)存溢出哈,不過(guò)我做的功能也不難,其實(shí)內(nèi)存溢出這個(gè)事情原生代碼寫的不好也會(huì)出的吧。都是真機(jī),有5.0的,也有4.x的,4.1以上
前段時(shí)間接觸過(guò)React-Native,當(dāng)時(shí)發(fā)現(xiàn)Android好多Widgets都沒(méi)有哎,是我使用的方式不對(duì)嗎?
還有React-Native目前只能加速APP build 的速度嗎?我看源碼只有dev的時(shí)候才會(huì)加載網(wǎng)絡(luò)端的bundle,這樣感覺(jué)意義不大啊,我嘗試修改其源碼使release版也可以加載在線bundle,不過(guò)后來(lái)沒(méi)時(shí)間就放棄了。
Android常用的控件基本都有了,其他的如果自己有需要也可以自己實(shí)現(xiàn),這個(gè)在 React-Native 的官方文檔有提到 Native 模塊和 UI 模塊與 React 的結(jié)合部分。 React-Native在Release下也可以加載在線的bundle,可以參考博客:http://richard-cao.github.io/。react和加速app build的速度沒(méi)必然聯(lián)系。
最終發(fā)布的安裝文件不會(huì)有被反編譯或者被查看到JavaScript代碼的風(fēng)險(xiǎn)吧?(畢竟是用Javascript開發(fā)的)。另外,你們踩坑之路,遇到難題后一般去哪里查文檔的? 有沒(méi)有優(yōu)秀的RN文檔資源或者圖書推薦?
不用擔(dān)心,F(xiàn)acebook打包出來(lái)的js代碼是經(jīng)過(guò)混淆的,反混淆出來(lái)也難以看出業(yè)務(wù)邏輯。
一些學(xué)習(xí)資料:https://github.com/jondot/awesome-react-native https://github.com/ele828/react-native-guide
原生Android開發(fā)獲取本地APP圖標(biāo)都是Drawable類型的,如何把本地APP的圖標(biāo)顯示在RN的Image上?
http://reactnative.cn/docs/0.31/images.html#content 使用混合App的圖片資源,如果你在編寫一個(gè)混合App (通過(guò)Xcode的asset類目或者Android的drawable文件夾打包)
React-Native ListView上1000條數(shù)據(jù)如何?卡不卡?很多非原生前端(包括很多原生前端)并不曉得React-Native的性能如何,更可能是壓根不知曉其性能消耗情況。React-Native真的如其吹噓的具備原生的體驗(yàn)嗎?
你說(shuō)的是這個(gè)issue吧?https://github.com/facebook/react-native/issues/499 新的版本已經(jīng)修復(fù)了;附帶一個(gè)三方的解決方案 https://github.com/sghiassy/react-native-sglistview
這個(gè)也算fixed?react-native-sglistview也算是解決方案?看看他的issues https://github.com/sghiassy/react-native-sglistview/issues 還有多少坑。
謝謝你的熱心說(shuō)明,我對(duì)ListView的性能研究得不夠深入,總結(jié)來(lái)說(shuō)RN還真不適合做大量數(shù)據(jù)列表
最近在調(diào)研RN,主要面臨兩個(gè)問(wèn)題,1是可復(fù)用的ListView,2是好用的tabbar,還請(qǐng)推薦下,有沒(méi)現(xiàn)成的組件,如沒(méi)有,自己寫可不可行?不知iOS方面有沒(méi)有兼容的計(jì)劃?
ListView解決方案,https://my.oschina.net/droidwolf/blog/750479
iOS方面,http://blog.wix.engineering/2016/06/30/recycling-rows-for-high-performance-react-native-list-views/
請(qǐng)問(wèn)RN在項(xiàng)目版本管理中,如何分配目錄方便團(tuán)隊(duì)共同使用?包括新加入成員。
RN還是比較好做版本管理的,項(xiàng)目規(guī)模2到4個(gè)人,其中一個(gè)主程,按功能模塊分工,遇到?jīng)_突由主程協(xié)調(diào)其他開發(fā)協(xié)調(diào)解決,不過(guò)沖突基本很小,沒(méi)有二進(jìn)制文件的沖突也比較好解決。
之前想學(xué)習(xí)RN Android開發(fā),Windows下搭建開發(fā)環(huán)境各種坑,最終放棄。不知道現(xiàn)在RN Android針對(duì)Windows環(huán)境有沒(méi)有改進(jìn)?
不好意思,我也沒(méi)試過(guò)Windows下的體驗(yàn),估計(jì)進(jìn)展不大吧,因?yàn)镕acebook是技術(shù)主導(dǎo)型公司,比較少用Windows吧
國(guó)內(nèi)搭建環(huán)境都極不順利,有什么好的方法嗎?
npm掛一個(gè)淘寶鏡像的代理,可能會(huì)快一些,不過(guò)最好還是有科學(xué)上網(wǎng)環(huán)境, 淘寶npm鏡像:https://npm.taobao.org/
六、也有不少開發(fā)者對(duì)增量更新這方面比較關(guān)心——有關(guān)增量更新的問(wèn)題
React-Native實(shí)現(xiàn)的應(yīng)用能否實(shí)現(xiàn)增量更新?如果能,蘋果商店會(huì)限制此類應(yīng)用嗎?
可以實(shí)現(xiàn)增量更新;大家都知道天貓已經(jīng)上了一個(gè)活動(dòng)頁(yè),至少目前來(lái)看,Apple是不會(huì)限制的。相信大公司應(yīng)該有大公司的胸懷。
React Native 應(yīng)該是支持熱跟新吧,就是通過(guò)服務(wù)端來(lái)控制界面,這樣就不要老提交蘋果審核了,但是我不確定支持嗎?還有就是他和原生開發(fā)有什么區(qū)別?原生能做的它都可以嗎?
遠(yuǎn)程的熱更新是ok的,因?yàn)閳?zhí)行的是Jsbundle,Jsbundle是打包完成的js文件;原生做的它都可以么?--至少可以通過(guò)各種途徑去實(shí)現(xiàn),React-Native iOS版本目前也是公測(cè)中。