先說結(jié)論
React Native實(shí)際上是一種Hybrid開發(fā)方式售淡。
理論上,RN可以在跨平臺(tái)的基礎(chǔ)上系瓢。解決開發(fā)中的任何問題阿纤、達(dá)到和native一樣的效果。
但前提是夷陋。開發(fā)人員至少要完全熟悉React框架欠拾。以及iOS、Android端的Native代碼骗绕。
在有人很hold主RN的整體系統(tǒng)的前提下藐窄。業(yè)務(wù)開發(fā)人員是可以舒服的開發(fā)RN代碼的。
RN大略
? ? 移動(dòng)端開發(fā)酬土。大家很少使用H5實(shí)現(xiàn)主路徑功能的原因是荆忍。H5的交互體驗(yàn)略差。但H5有一個(gè)優(yōu)勢(shì),就是它是跨平臺(tái)的刹枉。所以就有人想讓native和js結(jié)合叽唱。達(dá)到既能有很好的使用體驗(yàn)。又能跨平臺(tái)微宝。這就是RN產(chǎn)生的原因棺亭。
? ? 但真的能做到性能與跨平臺(tái)兼有嗎?JavaScript的運(yùn)行環(huán)境是串行的蟋软。一旦串行中有阻塞侦铜,就會(huì)造成卡頓。就應(yīng)該放到native中實(shí)現(xiàn)钟鸵。所以結(jié)論就是耗性能的操作應(yīng)該放到native中實(shí)現(xiàn)钉稍,其他的操作可以用javascript實(shí)現(xiàn)。
? ? 令一個(gè)解決js性能問題的方案是棺耍。在native另開一個(gè)js環(huán)境贡未。在另外的線程運(yùn)行js代碼。結(jié)果回傳到原來的js context里面蒙袍。類似的開源庫是react-native-threads這種方式可能造成內(nèi)存問題俊卤。
業(yè)務(wù)開發(fā)人員的舒適度
? ? javascript語言是弱類型。用來開發(fā)單頁面的web端害幅。代碼量不會(huì)很高消恍。問題不是很大。但如果用到RN開發(fā)以现,會(huì)很吃力狠怨。因?yàn)殚_發(fā)人員會(huì)經(jīng)常調(diào)用未知的接口。接口的參數(shù)數(shù)量邑遏、接口的參數(shù)類型佣赖、參數(shù)如果是對(duì)象的話、對(duì)象的結(jié)構(gòu)记盒。都不知道憎蛤。這會(huì)是非常痛苦的。
? ? 解決js弱類型的方法是在js的語法基礎(chǔ)上纪吮,增加類型檢查語法俩檬。目前的方案有兩種。
flow+babel:這個(gè)方式也是RN自帶的方式碾盟。flow負(fù)責(zé)靜態(tài)語法檢查棚辽、babel負(fù)責(zé)編譯js,將檢查語法去掉巷疼。但Facebook并沒有將flow做的足夠貼心晚胡。導(dǎo)致各種小bug。包括斷點(diǎn)調(diào)試嚼沿,斷點(diǎn)不生效估盘。斷點(diǎn)的位置不準(zhǔn)確等問題。同時(shí)開發(fā)人員需要一個(gè)用著順手的IDE骡尽。atom和flow集成后的使用體驗(yàn)并不好遣妥。VSCode集成flow體驗(yàn)還不錯(cuò)。
TypeScript:這是微軟開發(fā)的開源語言攀细。雖然很多人都不喜歡微軟箫踩。但TypeScript集成VSCode是真心好用。安裝React Native Tools插件后谭贪。開發(fā)體驗(yàn)和傳統(tǒng)IDE沒有區(qū)別境钟。debug、斷點(diǎn)俭识、查看聲明慨削、語法檢查與提示樣樣貼心!
這里有一個(gè)需要注意的點(diǎn)套媚。因?yàn)镽N本身是一flow語法為主的缚态。其他的第三方庫是以js為主的。這里如果需要依賴js庫堤瘤。就需要d.ts文件玫芦。這個(gè)文件往往都是現(xiàn)成的。如果是自己的js庫本辐,就需要使用命令生成d.ts文件桥帆。可參考這里慎皱。
? ? 關(guān)于TypeScript+RN的配置环葵。在這里。
總體來說宝冕,TypeScript+VSCode+React NativeTools+RN张遭,是真心好用。但有大牛能hold住RN整個(gè)系統(tǒng)的前提下地梨。生產(chǎn)環(huán)境下使用是絕對(duì)沒有問題的菊卷。