一次掌握 React 與 React Native 兩個框架

来源:https://www.cnblogs.com/parry/archive/2018/09/14/intro_react_and_reactnative.html
-Advertisement-
Play Games

此系列文章將整合我的 React 視頻教程與 React Native 書籍中的精華部分,給大家介紹 React 與 React Native 結合學習的方法。 ...


此系列文章將整合我的 React 視頻教程與 React Native 書籍中的精華部分,給大家介紹 React 與 React Native 結合學習的方法。

1. 軟體開發語言與框架的學習本質

我們在開始系列文章的技術點內容前,花一點時間探討一下軟體開發語言以及框架的學習本質,相對於整個技術點的講解,花這一點一起思考的時間是值得的。

相信看此系列文章的朋友都已有了非常多的軟體開發經驗,而當我們回顧語言與框架的學習過程時,所有語言的基礎語法都大同小異,無非基礎數據類型、條件判斷、分支判斷、迴圈處理等等。而差別或者說最重要的是在框架的底層本質,也就是為什麼會產生此框架、底層的優勢是什麼、為什麼不用別的框架、框架的底層與設備之間是如何實現通信的等等。

截圖

我們在開發的過程中,遇到的一些基礎語法問題、框架使用問題,基本上只要靈活使用一下搜索引擎都能找到答案,有句話說:你要相信你遇到的技術難題在這個世界上肯定有其他人也遇到了。

而當我們需要抓住本質,對語言與框架有更加深入地瞭解、進行技術選型時、知道每一種技術的優劣、當框架的表現出現了一些詭異問題時會迅速定位問題、優化項目的性能,以及成為某一領域的專家時,最高效的學習方法就是直接去接觸語言與框架的底層本質。

如 JavaScript 中的深拷貝與淺拷貝,如果只是進行數據類型的深拷貝與淺拷貝,即使你忘記了處理邏輯,你只要通過搜索引擎搜索就可以找到很多的實現方法,而如果你想一次掌握好此知識點,那麼就需要你直接去學習數據結構以及數據類型對應的值類型與引用類型的區別,只有在掌握此部分的知識點後,在遇到數據類型的「詭異」表現時你才能抓住問題本質。

再如你在使用 React Native 框架提供的各種組件與 API,如訪問移動設備的相冊與攝像頭、震動、GPS 定位、網路狀態、消息推送以及整個 React Native 框架生態下提供的成千上萬的第三方功能組件時,其實底層都是 React Native 框架與 iOS、Android 平臺通信的實現。在原理章節掌握了原理後,後續的章節我們還會一起自己動手來實現一個與 iOS、Android 平臺通信的自定義組件。

學習、精通語言與框架最好的方法就是直接掌握其最本質的部分。

2. React 與 React Native 框架簡介

React 框架最早孵化於 Facebook 內部,作為內部使用的框架,在 2011 年的時候 React 框架被用於 Facebook 的新聞流並於 2012 年使用在了 Instagram 項目上。在 2013 年五月美國的 JSConf 大會上,React 框架項目被宣佈了開源。

在移動開發方面,Facebook 曾致力於使用 HTML 5 進行移動端的開發,最終發現與原生的 App 相比,體驗上還是有非常大的差距,並且這種差距越來越大,特別是性能方面的差距。
最終,Facebook 放棄了 HTML 5 的技術方向,結合之前介紹的 React 框架的發展歷史,2015 年 3 月,Facebook 正式發佈了 React Native 框架,此框架專註於移動端 App 的開發。

React 作為構建高性能 Web 應用的框架,React Native 作為構建跨 iOS 與 Android 平臺 App 應用的框架,極其繁雜的開發生態造成了很多朋友對 React / React Native 框架產生了些許誤解,認為框架太過龐雜混亂,造成了學習成本與開發成本的增加。

此系列文章將帶領大家深入探究 React 與 React Native 框架的本質,只有在掌握了框架本質後,才能快速地領略到這兩個孿生框架的核心,不僅可以在這兩個框架間靈活切換學習,還可以不被繁雜的框架生態所矇蔽,最終達到以不變應萬變的境界。

3. 將 React 與 React Native 結合在一起學習

從上面的 React 與 React Native 簡介即可看到,兩個框架算是孿生項目,而 React Native 的底層也就是 React 框架。

截圖

React 框架使用 JSX(JavaScript eXtension,可以理解為看起來像 HTML 的 JavaScript)指定 React 組件的輸出定義,而邏輯函數的部分依然是採用 JavaScript ES6 來編寫,所以對於前端開發人員來說上手非常地容易。

編寫的代碼通過 React 框架渲染在 Web 瀏覽器中運行,所以 React 可以用來開發 Web 項目,當然藉助第三方的組件還可以開發桌面項目,這些我們在後續會進行相關介紹。

React Native 依然由 JSX 進行組件佈局的開發,框架中組件開發的原理與思想與 React 框架一致,而且底層都由最重要的 state 進行驅動。

React 與 React Native 除了在編碼表現層都使用 JSX 語法外,在 React 與 React Native 的底層都有 Virtual DOM 與 DOM 之間的映射與轉換,以實現了頁面組件高效更新的前端表現。

截圖

用戶看到的表現層(Browser DOM)的更新,底層都是由 state 驅動了 Virtual DOM 進行變動前與變動後的比較,最終將需要重新渲染的 DOM 進行渲染展示。

而這種通過只修改 state (Model) 值引起 HTML (DOM) 變化的框架設計模式就是我們熟悉的 MVVM (Model-View-ViewModel) 模式。

以前我們可以通過直接操作 HTML 元素的形式進行頁面的更新,如下麵的這段 jQuery 代碼。

$('#container').text('Updated Content...')

當這樣的代碼在頁面更新非常複雜的項目中使用時,你會疲於通過操作 DOM 元素更新,映射後臺大量的數據更新。

截圖

而 MVVM 模式,如目前的前端框架 Vue、Angular 和我們介紹的 React 都是基於此設計模式,將頁面呈現 View 與後臺的數據模型 Model 進行了分離解耦,使得我們只需要專註於 Model 的處理,通過修改 Model 中的屬性值,引起前端 View 的變化,不過 React 預設的數據綁定方式是單向綁定,這一部分的差異我們後續章節會展開討論。

對於 MVVM 模式的體驗以及如何通過修改 Model 引起 View 的更新,大家可以查看下一小節,我會給大傢具體的代碼演示。

而目前的移動端開發方面,「原生開發」是指 iOS 平臺通過 Objective-C 或 Swift 語言開發並通過 Xcode 編譯打包發佈 iOS App,Android 平臺通過 Java 語言開發並通過 Android Studio 編譯打包發佈 Android App。

通過下圖我們可以看到「原生開發」的學習成本以及後期 App 維護的成本,而 React Native 則是通過 JavaScript 開發,然後通過框架提供的與對應平臺之間的 bridge 進行通信,實現了只用一套代碼可以直接部署到 iOS 與 Android 平臺並編譯出對應平臺的 App。

截圖

並且 React Native App 頁面佈局直接通過 HTML 和 CSS 的前端基礎技術進行佈局與開發,大大降低了學習成本。

你如果早就在心裡有開發一個自己 App 的想法,而剛好你有前端開發的技能,React Native 一定會是你孵化自己 App 最好的選擇。

4. 系列文章的內容範圍

本系列文章會從 React 的基本使用方法開始,並會講解到 React 的底層原理,並從一些實際案例中探討出 React 底層對於前臺表現的原因。底層原理會結合獨立的演算法以及 React 框架的源碼進行詳細解釋。

之後會講解演示 React Native 的基本使用,同時會解釋 React Native 框架與 React 框架的關係、React Native 的性能問題、以及 React Native 與 iOS、Android 平臺通信的原理,拋卻 React Native 紛雜的各種類庫,直達 React Native 的底層原理,掌握了原理後才能看懂所有表象的類庫實現原理。並會動手自己實現 iOS 平臺與 Android 平臺的自定義組件,深入掌握各種第三方組件的實現原理。

我的「React.js 入門與實戰」視頻教程:http://coding.imooc.com/class/83.html

我的《React Native 精解與實戰》書籍:http://rn.parryqiu.com/

5. 小結

這一小節給大家描繪了整體安排以及學習的本質,接下來我們會先從 React 底層原理開始,掌握好這兩個框架最本質的部分。

任何知識的學習過程都不會是「舒服」的過程,只有跳離自己的舒適區,才能有進步,所以遇到任何疑問或想交流的問題,大家只需在文章下留言即可,我都會與大家交流。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第1章 第2章 與`time`結合使用 多個 元素 元素 元素 添加 元素 元素 網頁 屬性 往後餘生,唯獨有你 簡書作者:達叔小生 90後帥氣小伙,良好的開發習慣;獨立思考的能力;主動並且善於溝通 簡書博客: "https://www.jianshu.com/u/c785ece603d1" 結語 ...
  • 有朋友問我怎麼在vue-cli項目中使用layui中的layData組件,有時間從網上查了下寫下篇文章。 ...
  • JS 的function( window, undefined ) {}(window)寫法 (function( window, undefined ) {})(window);這個,為什麼要將window和undefined作為參數傳給它? (function( $, undefined ) { ...
  • 之前項目中沒有涉及到視覺滾動的網站,但是畢竟是一種常用的網站類別,不得不瞭解。實現方法很簡單,做一下簡單的分析。。。 概述:滾動視差是指多層背景以不同的速度移動,形成立體的運動效果,來帶非常出色的視覺體驗。 屬性:background-attachment ,決定背景在視圖中形態(固定、隨區塊固定) ...
  • JavaScript 字元串 JavaScript 字元串 JavaScript字元串用於存儲和處理文本。 字元串可以存儲一系列字元,如"HAHA"; 字元串是可以插入到引號中的任何字元,可以使用單引號,也可以使用雙引號。 例如: 可以使用索引位置來訪問字元串中的每個字元; 字元串中的索引是從0開始 ...
  • 今天碰到一個問題 vue路由跳轉到新的頁面時會直接顯示頁面最底部 正常情況下是顯示的最頂部的 而且好多路由中不是全部都是這種情況 折騰好長時間也沒解決 最後在網上找到瞭解決辦法 其實原理很簡單 就是在頁面載入完畢後 把滾動條的距離設置為(0,0) 就解決了 很不理解的就是為什麼會出現這種情況呢? ...
  • sass變數用法 1、sass變數必須以$符開頭,後面緊跟著變數名 2、變數值和變數名之間就需要使用冒號(:)分隔開(就像CSS屬性設置一樣) 3、如果值後面加上!default則表示預設值 預設變數 sass的預設變數:僅需要在值後面加上!default即可。 scss.style css.sty ...
  • 問題 在做銀行卡輸入框時有一個需求如題,這裡舉例用 隔斷 調查 查看了很多大公司網站的銀行卡輸入,發現還有有很多缺陷的: 有的是在中間刪除,游標會跳到最後; 有的是能刪除掉中間隔斷符的; 等等,邏輯感覺比較混亂,或者是我不懂他們的高深設計吧。 只有支付寶的設計感覺是比較合理的,改變了只有輸入框的固有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...