ReactNative之從HelloWorld中看環境搭建、組件封裝、Props及State

来源:https://www.cnblogs.com/ludashi/archive/2018/09/24/9282913.html
-Advertisement-
Play Games

開篇呢,先給大家問個好,今天是中秋節,祝大家中秋節快樂!!雖然是中秋節,但是木有回家還是總結一下知識點寫寫博客吧,想著昨天總結一下的,但是昨天和幾個同學小聚了一下,酒逢知己總是千杯少呢,喝的微醺不適合寫東西,所以就留到今天總結了。因為這段時間在工作中陸陸續續的接觸到了一些RN開發的東西,還是需要總結 ...


開篇呢,先給大家問個好,今天是中秋節,祝大家中秋節快樂!!雖然是中秋節,但是木有回家還是總結一下知識點寫寫博客吧,想著昨天總結一下的,但是昨天和幾個同學小聚了一下,酒逢知己總是千杯少呢,喝的微醺不適合寫東西,所以就留到今天總結了。因為這段時間在工作中陸陸續續的接觸到了一些RN開發的東西,還是需要總結一下的。今天只是個開篇,接下來還會有陸陸續續的關於RN開發的總結,今天主要是環境搭建、簡單的組件封裝、Props和State的介紹,稍後還會更新佈局、動畫等一些開發中常用的東西

雖然RN沒有Release版、雖然Airbnb放棄了RN、雖然Facebook正在重構RN, 但是RN還是動態化比較好的選擇方案的,還是要好好的搞一下RN的,當然也是工作中需要。既然要搞,就得認真呢,這篇是關於RN的第一篇博客,後續還會有其他關於RN的博客跟進的,也好在自己的學習歷程中打個Tag。今天博客比較簡單,是RN入門級別的,當然進階的東西目前還沒有接觸過,等深入後再展開來記錄吧。

RN官方文檔(https://facebook.github.io/react-native/docs/getting-started

 

一、RN下的Hello World

接觸一個新的東西那必須從HelloWorld開始呢,下方就一步步的從無到有搞一個RN的Hello World!

1、安裝Node和VSCode

首先我們來搞一下Hello World前的準備工作,使用RN時,Node環境是必不可少的,如果你沒有Node環境可以使用brew進行安裝。(如果你還沒安裝Homebrew, 那麼請Google自行安裝)

brew install node

然後可以把node的源更新成taobao的鏡像,這樣訪問速度會快一些。

npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global

 

裝完Node後,然後就是選擇安裝一個開發RN的IDE了,當然你如果夠強大,完全可以用記事本來編寫RN的代碼。當然用記事本是開玩笑的,可以用Sublime Text、Visual Studio Code等,如果比較土壕的程式員呢,你可以支持一下正版的Webstorm。當然想我這樣“溫飽都成問題”的程式猿,就只能用免費的VSCode了。

官方地址:https://code.visualstudio.com/

  

雖然本篇博客使用的VScode,但是平時開發中用WebStorm感覺還是挺爽的。

 

2、安裝 exp

直接在模擬器上調試,依賴於exp這個App,下方這個命令就是安裝exp。安裝完後,會在模擬器上看到Expo這個App, 下方我們就會用到這個Expo。

npm install exp --global

    

  

3、create-react-native-app and run app

安裝完Node後,使用Node的npm把create-react-native-app這個包裝一下,可以快速的創建一個RN-Project。

  

然後使用create-react-native-app可以創建一個RN工程了,下方創建了一個名為MyFirstRNProject的RN工程。

  

 

創建完相關的RN工程成功後會有相關的提示,我們還是按照其提示的倆,使用 yarn start 來啟動工程。

  

 

啟動後,會讓你選擇相關的運行方式,因為本篇博客是在iOS環境下做的Demo,所有就直接選擇 i 即可。

  

 

 選擇 i 後,就會啟動模擬器中的Expo。可以用 command + D 來調用和隱藏開發調試面板。然後就會看到右邊紅框找那個的預設的文案。

   

 

我們可以將預設的文案改一下,然後修改一下樣式,添加上我們的Hello World保存即可。因為預設Live Reload是打開的,所以當相關的文件被修改後,模擬器上的工程會自動Reload載入改動後的效果,具體如下所示:

    

 

在上面的代碼中我們還需註意到下方定義了一個 styles 的常量,該常量是我們需要的樣式對象。在RN中可以使用 StylesSheet.create()方法來創建我們需要的樣式。改樣式的定義規則與Web前端中的CSS差不多,使用方式頁非常的相似。下方我們還會定義其他的樣式表,稍後會介紹到。

 

 

二、使用TypeScript來開發RN

因為之前使用的另一個動態化的框架是用TypeScript來開發的,想在RN中也用TypeScript來開發,當然其預設的js語言的。在RN中支持TS開發,有相關的文檔(https://github.com/Microsoft/TypeScript-React-Native-Starter

  

 

然後把工程中的App.js替換成App.tsx即可。(純ts文件使用.ts來命名,有JSX的TS文件則使用tsx來做尾碼),改完再次運行我們的Hello World即可。

  

 

  

 

三、自定義組件(Componet)、Props以及State

實現完HelloWorld後我們來看一下RN中組件封裝的姿勢,下方會封裝一個HelloWorld的組件,然後在該組件的基礎上看一下RN中Props和State的使用姿勢。

1、HelloWorld組件封裝

在RN中封裝的組件都需要繼承自 Component 類,然後在該類中正常的去添加相關佈局和相關邏輯即可。下方我們將上述的HelloWorld進行了提取,創建了一個HelloWorld類,該類繼承自React中的Component。然後在render()方法中通過JSX來添加需要渲染的各種組件,當然在我們的HelloWorld中,我們只用到了Text這個組件來展示文字。

封裝的組件的使用姿勢與RN提供組件的使用姿勢是一樣的,都是通過JSX的語法來引入使用的。下方 <HelloWorld /> 就是我們封裝組件HelloWorld的使用姿勢。

  

 

2、Props - 屬性

屬性,說白了就是一個組件負責接送外部參數的一個東西,類似於一個方法的參數。當然,如果你使用一個Function來定義一個組件的話,那麼這個Props就是方法的參數。

在上面的HelloWorld的示例中,我們其實已經使用到了Props這個東西,只不過是系統自帶的,比如上面為HelloWorld指定的 style 就是一個props, 該props傳入的是一個樣式對象。我們從Web前端的角度來說,屬性這個東西應該是比較好理解的,div後邊跟的key 和 value, 後邊這個value就是相關key的屬性。接下來我們將要介紹如何給自定義的組件添加特定的屬性。

   

 

下方我們寫了一個HelloWorld的組件,該組件繼承與React中的Component,然後在render中渲染了一些組件,其中的Text是從屬性Props中取的,從下方代碼中看出,直接從Props中取相應的Key是可以取到的,不過強取值的話,會標紅,會提示相關的熟悉在Props中不存在。稍後會解決該問題。

  

 

下方就是我們寫的Hello Props組件,組件中的相關內容時通過Props中的相關key-value來傳過來的。換句話說,Props就是一個傳值的JSON串。

  

 

通常我們在開發中會為Props定義相關的類型,來聲明Props中都有哪些東西,下方就是我們為上述的HelloWorld補的Props的類型,然後通過協議的形式指定給HelloWorld組件。從下代碼我們看出,在Props類型後邊還有一個null的類型,該類型是聲明State的類型使用的。該處我們沒有相關的狀態,就暫且不指定,下方使用到的地方我們會給出相關的狀態值。

添加完相關的類型聲明後,之前下方標紅的地方就不存在了。

  

 

  

3、State-狀態

狀態對應RN來說有著舉足輕重的地位,整個RN的頁面或者一個小的RN組件都可以看做是一個狀態機,該狀態機就是通過這個State來管理的。State中可以存放各種狀態以及各種值,當這些值或者狀態被修改時,那麼這個組件節點就會被重新渲染,也就是更新頁面或者組件。下方我們就為我們的HelloWorld添加上相關的State狀態,然後通過該狀態所對應的值做一些事情。

  • 聲明State類型:首先我們像聲明之前的Props類型一樣聲明瞭一個HelloWorldStateType的狀態類型,然後HelloWorld組件中狀態類型的位置設置了該類型。改類型中有一個屬性,從狀態屬性我們不難看出是用來控制某個空是否展示白色的。
  • 初始State:我們指定狀態類型後,該狀態還需要一個初始狀態,於是在構造器中對該狀態進行了初始化。
  • 定時器修改狀態:然後我們用定義了一個定時器,使用定時器來定時的修改狀態的值,這樣便於我們觀察狀態修改後的變化。定時器的作用就是“隔一秒改一下時間”(下方有個錯別字,就不改了)
  • 最後就是在渲染的render方法中獲取相關狀態值進行使用了。該狀態最終用來控制字體顏色的變化。

  

 

下方就是上述代碼運行的相關效果,從下方的效果中不難看出,沒個一秒文字的顏色會隨著狀態而修改。

  

 

 今天博客就先到這兒,該做飯去了,下篇博客會總結一個RN中常用的佈局方式。


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

-Advertisement-
Play Games
更多相關文章
  • 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://blog.csdn.net/xuri24/article/details/81455449 一,前言 本文章是讀了“深入理解java虛擬機”一書的筆記記錄和心得。作為一名Java的開發從業者或愛好者,想要在這條路繼續和深入 ...
  • 一、前言 MySQL :是用於管理數據的軟體 MySQL是一種關係資料庫管理系統,關係資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。 分為服務端和客戶端(也是基於C/S架構的程式) 服務端: socket服務端 本地文件操作 解析指令(SQL語句) ...
  • pymysql的下載和使用 該模塊本質就是一個套接字客戶端軟體,使用前需要事先安裝,能夠讓我們在 Python程式中操作資料庫. pymysql模塊的下載: 在Python安裝文件中找到scripts文件 shift+右鍵打開powershell,接著如下圖: pymysql的使用 (數據均已存在) ...
  • 索引rebuild與rebuild online區別 1.0目的,本篇文檔探討索引rebuild 與 rebuild online的區別 2.0猜測:已有的知識 2.1對索引rebuild重建會對錶申請TM4級表鎖,將會影響業務修改數據,而對索引進行rebuild online則不影響業務修改數據, ...
  • 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://blog.csdn.net/xuri24/article/details/80963801 慢查詢日誌概念 MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中響應時間超過閥值的語句,具體指運行時 ...
  • 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://mp.csdn.net/postedit/80910082 索引概念: 索引是關係資料庫中用於存放每一條記錄的一種對象,主要目的是加快數據的讀取速度和完整性檢查。建立索引是一項技術性要求高的工作。一般在資料庫設計階段的與數 ...
  • Android中的構架模式一直是一個很hot的topic, 近年來Architecture components推出之後, MVVM異軍突起, 風頭正在逐漸蓋過之前的MVP. 其實我覺得MVP還是有好處的, 比如靈活多變(其實只是我用起來更熟悉順手一些吧). 個人是沒有什麼偏見的, 關於項目的構架,... ...
  • 線性佈局線性佈局LinearLayout是最常用的佈局,顧名思義,它下麵的子視圖像是用一根線串了起來,所以其內部視圖的排列是有順序的,要麼從上到下垂直排列,要麼從左到右水平排列。排列順序只能指定一維方向的視圖次序,可是手機屏幕是個二維的平面,這意味著還剩另一維方向需要指定視圖的對齊方式。故而線性佈局 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...