了解新的事物之前帶著問題思考以下問題
1涧狮、什么是ReactNative?
2朋譬、ReactNative有什么特點(diǎn)?
3兴垦、運(yùn)行ReactNative需要什么環(huán)境以及如何搭建徙赢?
4、ReactNative原理是什么探越?
5狡赐、ReactNative通信機(jī)制?
6钦幔、學(xué)習(xí)過程中遇到的問題以及踩過的坑枕屉?
7、參考鏈接
什么是ReactNative鲤氢?
>+ 解決這個(gè)問題之前先了解什么是React搀擂?
React 是 Facebook 推出的一個(gè)用來構(gòu)建用戶界面的 JavaScript 庫。
ReactNative是由Facebook推出的卷玉,可以讓開發(fā)者使用 JavaScript 和 React 創(chuàng)建基于Web哨颂,iOS 和 Android 平臺原生應(yīng)用的一套框架。
React Native 的關(guān)鍵就是相种,以把 [React]編程模式的能力帶到移動(dòng)開發(fā)來作為主要目標(biāo)威恼。
它的目標(biāo)不是跨平臺一次編寫到處執(zhí)行,而是一次學(xué)習(xí)跨平臺開發(fā)。
ReactNative有什么特點(diǎn)箫措?
1腹备、JS VM跟iOS的渲染是處于兩個(gè)線程的,也就是說JS代碼控制邏輯和Viewer斤蔓,
iOS Framework對Viewer進(jìn)行渲染植酥。
2、React Native繼承了React 在JSX(JavaScript 的擴(kuò)展語法)中直接以聲明
式的方式來描述 UI 結(jié)構(gòu)的機(jī)制附迷,并實(shí)現(xiàn)了一個(gè) CSS 的子集惧互,這把「DOM Representation」的概念
外擴(kuò)成了「UI Representation」,由于不是操作真實(shí) UI喇伯,就可以放到非 UI 線程來進(jìn)行
render(render 都不會直接影響 UI),React Native 就會同樣是把兩次 render 的 diff 結(jié)果
算出來喊儡,然后把 diff 結(jié)果傳遞回主線程,在最小范圍內(nèi)更新 UI稻据。
3艾猜、盡管都用JavaScript,但用React做iOS開發(fā)與網(wǎng)頁開發(fā)是完全兩種體驗(yàn)捻悯。
在React Native里你見不到<div>匆赃,但是會經(jīng)常用到<View>,也就是說我們已經(jīng)完全脫離了HTML的框框今缚,
而是用標(biāo)記語言的格式寫類似XML風(fēng)格的JS代碼算柳,調(diào)用的都是iOS平臺下的原生組件。
4姓言、React Native的目的在于讓原本用WebView做的App去掉DOM渲染層瞬项,用更加原生的界面元素和渲染引擎提升性能,
致力于去掉更多的中間層何荚,只保留一個(gè)Flux+React的中心概念囱淋,這才是一個(gè)合理的發(fā)展趨勢。
5餐塘、React Native將Flexbox排版移植到了iOS上妥衣,也就是說開發(fā)者可以不再忍受Constraint-based的
Layout Engine,而轉(zhuǎn)而使用更直觀戒傻、更像CSS的Boxed Layout税手。
6、可以直接使用Native原生的「牛逼」動(dòng)畫需纳。
7冈止、在React Native中,寫JS的工程師解決的是「將基本組件拼裝成可用的React組件」的問題候齿,
寫Native Code的工程師解決的是「提供核心組件熙暴,提供足夠的擴(kuò)展性闺属、靈活性和性能」的問題。
運(yùn)行ReactNative需要什么環(huán)境以及如何搭建
名詞解釋:
1周霉、Homebrew:Mac系統(tǒng)的包管理器掂器,用于安裝NodeJS和一些其他必需的工具軟件。
2俱箱、Node.js:一個(gè)Javascript運(yùn)行環(huán)境(runtime),實(shí)際上它是對Google V8引擎進(jìn)行了封裝国瓮。V8引 擎執(zhí)行Javascript的速度非常快狞谱,性能非常好乃摹。
3、React-native-cli:React Native的命令行工具跟衅。用于執(zhí)行創(chuàng)建孵睬、初始化、更新項(xiàng)目伶跷、運(yùn)行打包服務(wù)(packager)等任務(wù)
3掰读、NVM:node版本管理器。
ReactNative的原理是什么叭莫?
React Native用iOS自帶的JavaScriptCore作為JS的解析引擎蹈集,但并沒有用到JavaScriptCore
提供的一些可以讓JS與OC互調(diào)的特性,而是自己實(shí)現(xiàn)了一套機(jī)制雇初,這套機(jī)制可以通用于所有JS引擎上拢肆。
App在運(yùn)行時(shí)只運(yùn)行一個(gè)JavaScript Core VM,然后用Objective-C搭建一個(gè)Bridge把iOS的各種
組件Expose給JS代碼靖诗。React Native實(shí)現(xiàn)了一些常用的組件的Bridge可以直接在JS中使用郭怪,
如果開發(fā)者需要使用其他的組件可以自己寫一個(gè)Bridge將API Expose給JS VM,所以理論上Native App
能做的事情React Native都能做到呻畸。