」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 從 React 到 React Native 的旅程

從 React 到 React Native 的旅程

發佈於2024-11-08
瀏覽:250

作为一名 React / JS 开发人员,您可能有这样的想法 “我应该学习 React Native 吗?” 这是一个公平的问题,也是我几年前问自己的问题。事实证明,学习 React Native 绝对是正确的决定。这让我成为了亚马逊的高级开发倡导者,我现在使用 React Native 跨 Android、Fire TV 和平板电脑设备构建应用程序。

如果您正在争论是否要超越网络应用程序,这里有一些关于为什么值得考虑的想法:

为什么要学习 React Native?

  • “一次学习,随处编写”的理念不仅仅局限于 iOS 和 Android,它现在还包括 tvOS、VisionOS 等平台,甚至像 React-native-macos 等桌面环境

  • 行业相关性:亚马逊、Meta、微软等大公司都在采用 React Native。 为什么?代码可重用性、成本效益高,并且允许您构建跨平台。

  • 强大的社区支持:React Native 在 GitHub 上拥有超过 100k star 和 24k fork,定期更新和积极开发。

  • 开发者满意度高:根据 React Native 现状调查,90% 的开发者会再次使用 React Native!

  • 统一生态系统:React Native社区围绕Expo集结,带来更快的改进、良好集成的第三方库和丰富的共享资源。

Journeying from React to React Native

  • 熟悉的开发者经验

React 与 React Native:异同

架构与编译

相似之处:

两者都使用通常称为“虚拟 DOM”的协调过程。此过程将一棵树与另一棵树进行比较,以确定 UI 的哪些部分需要更新。因此,它们都支持快速刷新,使您能够实时看到 UI 变化。

差异:

React 编译以利用 DOM 和 Web API 在 Web 浏览器中呈现。即使通过移动浏览器访问,它仍然受到浏览器功能的限制,并且对本机设备功能的访问受到限制。

另一方面,

React Native 编译为本机代码,允许直接访问特定于平台的 API 和功能。这意味着 React Native 应用程序可以利用相机访问、推送通知等设备功能,提供本机用户体验。因此,它采用了不同的架构方法,即所谓的“无桥”架构,并且它使用本机组件而不是 DOM。它使用 Turbo Native 模块并利用 JavaScript 接口 (JSI),允许 JavaScript 和本机代码之间直接通信。这种架构是新的,您可能会听到“新架构”这个术语。如果您有兴趣了解更多信息,我在上一篇文章中对此进行了介绍。

Journeying from React to React Native

JSX 和 Hooks

相似之处

两者都使用 JSX 来描述 UI 并支持 React hooks(useState、useEffect 等)。这使您可以在两个库中保持一致的编码风格和状态管理方法。

成分

相似之处

React 和 React Native 都遵循基于组件的架构,并且组件在底层遵循相同的生命周期方法。

差异:

  1. 组件导入:在React Native中,您可以从react-native导入UI组件,这与React不同,其中HTML元素是全局可用的。这种差异实际上是我最喜欢 React Native 的事情之一,因为你可以访问一组开箱即用的预构建组件,例如视图、文本、图像、TextInput、ScrollView。
  2. 特定于平台的组件:React Native 还提供为 iOS 和 Android 量身定制的开箱即用的组件和 API。
  3. 文本处理:在 React Native 中,所有文本都必须包装在 组件中,这与在 React 中文本可以直接放置在许多元素中不同。这可确保不同平台上文本的正确样式和行为,从而提高一致性和可访问性。
  4. 事件处理:React使用onClick进行点击事件,而React Native使用onPress进行触摸交互,体现了交互性质的不同。

Journeying from React to React Native

造型

相似之处

React 和 React Native 都提供了灵活的组件样式设计方法。它们都支持内联样式,允许您将样式直接应用于组件。此外,两者都可以创建可重用的样式对象。

差异

  1. 样式语言:React 通常使用 CSS 或 CSS-in-JS 库进行样式设置,而 React Native 使用基于 JavaScript 对象的样式系统,但有一些区别:
    • 属性名称:React Native 使用驼峰命名法作为属性名称(例如,fontSize 而不是 font-size)。
    • 值单位:在 React Native 中,您不需要宽度、高度或字体大小等属性的单位,它会自动假定尺寸以与密度无关的像素为单位。
  2. StyleSheet API:React Native 提供了 StyleSheet.create() 方法来创建样式对象。该 API 通过减少在每次渲染上重新创建样式对象的需要来提高性能。
  3. 样式应用:与 React 中的类名可用于应用样式不同,React Native 使用 style 属性将样式直接应用于组件。
  4. 有限的 CSS 子集:React Native 仅支持 CSS 属性的子集,重点关注那些对不同布局有意义的属性。这意味着某些特定于 Web 的属性(如 float)不可用,而其他属性(如 flex)可能表现不同。

Journeying from React to React Native

库和工具

相似之处

React 和 React Native 共享许多核心库。您可以使用相同的状态管理库(如 Redux、MobX)以及数据获取库(如 Axios 或 Fetch API)。

差异

导航: 虽然在 React 中您通常可能使用 React Router 进行 Web 导航,但 React Native 有自己的 React 导航库。这是因为 React (Web) 通常使用基于 URL 的导航,其中根据当前 URL 路径呈现不同的组件。而 React Native 使用基于堆栈的导航,模仿本机移动应用程序体验。屏幕彼此“堆叠”在一起,通过过渡将新屏幕推入堆栈或“弹出”它们。

?注意:在构建应用程序时,请记住将文件夹命名为“Screens”而不是“Pages”。

Journeying from React to React Native

测试:两个库的概念仍然相似,侧重于组件渲染和事件模拟,但具体的测试库有所不同。 React 使用 React 测试库,而 React Native 您将使用 React Native 测试库 (RNTL),但不要推迟,因为 RNTL 只是在 React 测试渲染器之上提供轻量级实用功能。

?由于 DOM 依赖关系,某些 React 库可能无法与所有 React Native 平台兼容,但是您可以在以下位置检查所有库的平台兼容性:(https://reactnative.directory)

Journeying from React to React Native

通过通用 React 应用程序缩小差距

如果您仍持观望态度,那么通用 React 应用程序的兴起确实是一个令人兴奋的领域,它进一步缩小了 React 和 React Native 之间的差距。通用 React 库和工具通常由 react-native-web 提供支持,使您能够从共享的 React Native 代码库创建在 iOS、Android 和 Web 上运行的跨平台应用程序。这使您可以共享导航、样式、状态管理和业务逻辑,从而节省您的时间和精力,同时尊重每种设备类型的独特约定。

因此,随着 DOM 和 Device 之间的界限不断模糊,拥抱 React Native 为令人兴奋的多平台应用程序开发世界打开了大门!

如果您准备好开始,请查看我最喜欢的资源的评论,或在下面评论您的资源⬇️

版本聲明 本文轉載於:https://dev.to/amazonappdev/journeying-from-react-to-react-native-21ep?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 在 Golang 中建立 Google Drive 下載器(第 1 部分)
    在 Golang 中建立 Google Drive 下載器(第 1 部分)
    介绍 在本教程中,我们将构建一个功能强大的下载器,允许从Google Drive和其他云提供商下载文件。借助 Golang 高效的并发模式,您将能够同时管理多个下载、流式传输大文件并实时跟踪进度。无论您是下载一些小文件还是处理大型数据集,该项目都将展示如何构建可扩展且强大的下载器,...
    程式設計 發佈於2024-11-08
  • PHP 4 快速部署
    PHP 4 快速部署
    Servbay 已成為高效配置開發環境的領先工具。在本指南中,我們將引導您完成快速、安全地部署 PHP 8.1 的過程,以展示 Servbay 對簡化部署的承諾。 先決條件 確保您的電腦上安裝了 Servbay。您可以從 Servbay 官方網站輕鬆下載。安裝過程人性化;只需按照安...
    程式設計 發佈於2024-11-08
  • 如何繞過驗證碼
    如何繞過驗證碼
    No matter how many times people wrote that the captcha has outlived itself long time ago and no longer works as effectively as its developers would ha...
    程式設計 發佈於2024-11-08
  • 使用 super 呼叫超類別建構函數
    使用 super 呼叫超類別建構函數
    子類別可以使用 super(parameter-list);. 形式來呼叫其超類別定義的建構函數 parameter-list 必須指定超類別建構子所需的參數。 子類別建構子中執行的第一條語句必須始終是 super(); (或 super(parameter-list); 如果需要傳遞參數). ...
    程式設計 發佈於2024-11-08
  • 你能比較 C++ 中不同容器的迭代器嗎?
    你能比較 C++ 中不同容器的迭代器嗎?
    比較來自不同容器的迭代器:一個警示故事在C 中,迭代器提供了一個強大的遍歷集合的機制。然而,在使用來自不同容器的迭代器時,重要的是要意識到這些限制。 比較不同容器的迭代器是否合法的問題經常出現。考慮以下範例:std::vector<int> foo; std::vector<int...
    程式設計 發佈於2024-11-08
  • 幫助 FastAPI:如何為文件翻譯做出貢獻
    幫助 FastAPI:如何為文件翻譯做出貢獻
    One of the great features of FastAPI is its great documentation ?. But wouldn't it be better if more people around the world had access to this docume...
    程式設計 發佈於2024-11-08
  • 如何使用 CSS 和 AngularJS 建立垂直 HTML 表格?
    如何使用 CSS 和 AngularJS 建立垂直 HTML 表格?
    垂直HTML 表格創建具有垂直行的HTML 表格提供了一種獨特的方式來顯示數據,行標題位於左側而不是頂部。要實現此目的,可以套用 CSS 樣式來轉換表格的結構。 CSS 樣式若要將表格行呈現為垂直列,請遵循下列CSS 規則可使用:tr { display: block; float: lef...
    程式設計 發佈於2024-11-08
  • 透過自訂 Hooks 在 React 中重複使用邏輯:實用指南
    透過自訂 Hooks 在 React 中重複使用邏輯:實用指南
    自訂鉤子是React 中的一項強大功能,與React 內建鉤子不同,它用於更具體的目的,並且它是透過將常見功能封裝到獨立函數中來完成的。自訂掛鉤促進可重複使用性、改進元件組織並整體增強程式碼可維護性。 在本指南中,我們將深入探討使用自訂鉤子的目的,以了解創建自訂鉤子的基礎知識以及如何使用其他元件。...
    程式設計 發佈於2024-11-08
  • 使用 ReactJS 建立免費的 AI 圖像生成器
    使用 ReactJS 建立免費的 AI 圖像生成器
    开发者们大家好, 今天,我将向您展示如何使用 ReactJS 创建图像生成器,并且完全可以免费使用,这要感谢黑森林实验室和 Together AI。 第 1 步:设置项目 在本教程中,我们将使用 Vite 来初始化应用程序并使用 Shadcn 来初始化 UI。我假设您已经设置了项目并...
    程式設計 發佈於2024-11-08
  • 字串中的串聯或大括號:哪種方法可以優化效能和美觀?
    字串中的串聯或大括號:哪種方法可以優化效能和美觀?
    字串中的變數連結與大括號:評估效能與美觀在字串操作領域,開發人員經常面臨兩難境地:他們應該連接字串中的變數還是選擇花括號?每種方法都有自己的優點和缺點,我們將深入研究這些優點和缺點,以提供明智的決策。 串聯:傳統方法串聯涉及使用以下方法將變數附加到字串這 '。 '操作員。雖然這種方法...
    程式設計 發佈於2024-11-08
  • 我嘗試過花崗岩。
    我嘗試過花崗岩。
    花岗岩3.0 Granite 3.0 是一个开源、轻量级的生成语言模型系列,专为一系列企业级任务而设计。它原生支持多语言功能、编码、推理和工具使用,使其适合企业环境。 我测试了运行这个模型,看看它可以处理哪些任务。 环境设置 我在Google Colab中设置了Gr...
    程式設計 發佈於2024-11-08
  • 掌握 JavaScript 函數:開發人員綜合指南
    掌握 JavaScript 函數:開發人員綜合指南
    JavaScript Functions A JavaScript function is a block of code designed to perform a particular task. A JavaScript function is executed when "...
    程式設計 發佈於2024-11-08
  • Go 中的機率提前過期
    Go 中的機率提前過期
    关于缓存踩踏 我经常遇到需要缓存这个或那个的情况。通常,这些值会被缓存一段时间。您可能熟悉这种模式。您尝试从缓存中获取一个值,如果成功,则将其返回给调用者并结束。如果该值不存在,您将获取它(很可能从数据库中)或计算它并将其放入缓存中。在大多数情况下,这非常有效。但是,如果您用于缓存...
    程式設計 發佈於2024-11-08
  • Next.js 快取:透過高效的資料獲取來增強您的應用程式
    Next.js 快取:透過高效的資料獲取來增強您的應用程式
    Next.js 中的快取不僅是為了節省時間,還在於減少冗餘網路請求、保持資料新鮮並使您的應用程式像搖滾明星一樣運作。 無論您是想將資料快取更長時間還是按需刷新,Next.js 都能為您提供所需的所有工具。在本文中,我們將詳細介紹如何在 Next.js 中有效地使用快取 Next.js 擴充了 fe...
    程式設計 發佈於2024-11-08
  • 為什麼我的 Go 模板條件檢查失敗?
    為什麼我的 Go 模板條件檢查失敗?
    Go 範本:條件檢查故障排除在 Go 範本渲染中,結構體欄位的條件檢查有時無法如預期運作。考慮以下範例,其中 bool 欄位 isOrientRight 未正確計算:type Category struct { ImageURL string
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3