最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React Native基礎(chǔ)入門之調(diào)試React Native應(yīng)用的一小步

 更新時間:2018年07月02日 15:11:31   作者:葡萄城控件技術(shù)團隊  
這篇文章主要給大家介紹了關(guān)于React Native基礎(chǔ)入門之調(diào)試React Native應(yīng)用的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

React Native(以下簡稱RN)為傳統(tǒng)前端開發(fā)者打開了一扇新的大門。其中,使用瀏覽器的調(diào)試工具去Debug移動端的代碼,無疑是最吸引開發(fā)人員的特性之一。

試想一下,當(dāng)你在手機屏幕按下一個按鈕,處理事件的代碼就可以立即在瀏覽器的調(diào)試工具里進行斷點調(diào)試,而且每當(dāng)你對代碼進行修改,界面便可以完成快速地重載,省去昂長的編譯時間,這會是多么提高工作效率。

傳統(tǒng)的Web前端開發(fā)人員自然很熟悉瀏覽器的調(diào)試工具,但是對于如何將其在RN中使用以便和移動端結(jié)合起來,也許會相當(dāng)陌生。這也成為了一些開發(fā)者跨入RN移動開發(fā)大門的第一道小門檻。

本文是筆者一邊參考官方文檔,一邊摸索RN調(diào)試過程的記錄。希望能夠幫助新手開發(fā)者走出一小步,更快地邁過這道門檻。

在開始之前,你需要搭建好本地開發(fā)環(huán)境,并有一部Android 5.0版本以上的手機可供連接至電腦。

首先,使用官方工具react-native-cli創(chuàng)建好一個初始化的工程,并安裝好依賴。

安裝的命令為“react-native init DebugTest”(DebugTest為我們這次的項目名稱)

安裝完成后,就會多出一個名為DebugTest項目文件夾,文件夾內(nèi)結(jié)構(gòu)如下:

圖1. 項目初始結(jié)構(gòu)

讓我們把項目運行起來。我這里是在Windows下開發(fā)Android平臺的應(yīng)用,并且在此之前,已經(jīng)用USB線連接好了一臺Android版本7.1.1的真機。

運行項目的方法,就是進入DebugTest項目目錄,此時執(zhí)行命令行react-native run-android。注意,這里啟動時會新彈出另一個窗口,用于在8081端口啟動一個叫做Metro Bundler的服務(wù),這個窗口在開發(fā)時是需要保持運行著的。

圖2. Metro Bundler 窗口

同時,可以看到原cmd命令行窗口,顯示在真機上安裝了apk,并自動對8081端口進行了某種映射,使真機上的應(yīng)用和我們將要調(diào)試的代碼建立了動態(tài)的關(guān)聯(lián)。這個過程會比較消耗開發(fā)者電腦的系統(tǒng)資源,耐心等待一會兒就好。

圖3. 原cmd命令行窗口

當(dāng)Metro Bundler窗口顯示index.js的映射進度達到100%時,手機上就可以看到默認(rèn)的應(yīng)用界面了。

圖4. 默認(rèn)應(yīng)用界面

同時,我們也可以退出應(yīng)用,在手機的桌面上找到這個安裝好的應(yīng)用。這里,它的名字就是DebugTest,圖標(biāo)是一個默認(rèn)的安卓樣子。

我們進入這個應(yīng)用,這時如果搖一搖手機,會彈出調(diào)試相關(guān)的設(shè)置:

圖5. 調(diào)試設(shè)置界面

Reload就是重刷整個應(yīng)用,類似于在瀏覽器的F5刷新。

Debug JS Remotely這個我們先留一個懸念,待會再來看。

先看看Enable Live Reload和Enable Hot Reloading。這兩個都可以實現(xiàn)在代碼保存時自動更新界面,它們區(qū)別是:Live Reload會重刷整個界面,相當(dāng)于手動執(zhí)行一次Reload。而Hot Reloading控制得更精準(zhǔn),它不會重刷整個界面,只會更新修改代碼時影響的那個范圍。官方文檔里描述的是:This will allow you to persist the app's state through reloads. 也就是說,Hot Reloading時整個應(yīng)用的狀態(tài)是不會改變的,頁面也是不會整個重刷的。有趣的是,與Live Reload對比,Hot Reloading的Reloading這個正在進行時的語法,也似乎意味著Hot Reloading是當(dāng)程序正在運行時去熱乎乎地替換。

也許是因為各種 Reloading過于強大,它有時會出一點問題,比如在開啟Live Reload或者Hot Reloading后,偶爾代碼錯誤時手機上彈出的紅屏界面在代碼修改好后仍然不能恢復(fù),這種時候,就需要手動Reload界面才能解決。

讓我們只是Enable Live Reload,然后從react-native引入Button,在View里加上一個按鈕。

圖6. 添加按鈕

這個時候,保存代碼。手機界面確實立即就變化了!說明Live Reload確實生效了。

不過,不是我們想要的界面,而是出現(xiàn)紅屏錯誤提示。

圖7. 紅屏錯誤提示

不用怕,遇到問題很正常。這時,可以從頭細(xì)心閱讀錯誤提示,發(fā)現(xiàn)它指出The title prop of a Button must be a string,并且這個error is located at: in Button (at App.js:37)。根據(jù)這個線索,我們看到App.js的第37行,正是剛才添加的Button代碼。

查閱文檔發(fā)現(xiàn),在RN里,Button組件有許多屬性,其中onPress和title這兩個屬性是required的,也就是必須要有。

圖8. 官方文檔關(guān)于Button的節(jié)選

所以我們修改代碼,

圖9. 補全Button需要的屬性

保存,手機界面就刷新了,并顯示出剛才添加的Button。

圖10. 正常運行

這里還有一小點值得注意,如果只給Button里的title設(shè)了值,而沒有給onPress設(shè)置,界面不會出紅色錯誤,而是在最下面出現(xiàn)一條黃色警告。仔細(xì)看,會發(fā)現(xiàn)其實這兩個屬性的Type不一樣。由此可知,當(dāng)需要的類型是string而實際是undefined時,會報error,而需要的類型是function而實際是undefined時,只會報warnning。

同時可以看到,在上面的代碼中,當(dāng)按鈕按下時,會調(diào)用一個打log的事件。但是打出的log在哪兒可以看到呢?

有兩種方法。 第一種是在命令行顯示,在項目當(dāng)前目錄(注意,一定要在項目當(dāng)前目錄)再啟動一個新命令行窗口,輸入

就可以在最下面看到輸出的內(nèi)容了,它不僅可以實時反饋現(xiàn)有的輸入,還保存了之前的輸入。比如,下面三次輸入,前兩次輸入是在之前還沒有開啟這個命令行窗口時按下的。

也許你會想:我不是想在命令窗口看到輸出,而是想能夠在瀏覽器里那樣看到輸出,甚至斷點調(diào)試。這就是查看log的第二種方法。

回到本文的初衷。讓我們回頭再看看調(diào)試設(shè)置界面中的Debug JS Remotely選項,現(xiàn)在點擊它。這時會彈出Chrome的一個標(biāo)簽(當(dāng)然,本地需要預(yù)先安裝有Chrome)。

圖11. 打開Remote JS Debugging后彈出的瀏覽器標(biāo)簽

注意:這里的Status:Debugger session #0 active就表示程序與該頁面成功建立連接了。

這個時候在瀏覽器開發(fā)者工具的調(diào)試窗口,也能看到打出的log。而且它還可以更進一步地進行斷點調(diào)試。

為更好地嘗試調(diào)試功能,我們修改一下代碼,添加一個sayHello方法輸出log。

圖12. 重新綁定onPress事件

保存,和預(yù)想的一樣,頁面刷新了,因為Live Reload。

如同調(diào)試Web前端代碼一樣,我們打開瀏覽器的開發(fā)者工具,找到代碼文件,并在sayHello函數(shù)里打一個斷點。這個時候,按下手機上的Test按鈕,可以看到程序執(zhí)行到斷點停下了,這與調(diào)試網(wǎng)頁代碼是多么相似:

圖13. 瀏覽器上的斷點調(diào)試

不過,與調(diào)試純網(wǎng)頁代碼有兩點不同。

第一,瀏覽器的頁面上看不到應(yīng)用界面,只能在手機上看到界面。

第二,手機上的界面在程序被斷住的情況下,仍然可以接收事件。舉個例子,就在此時,手機上該應(yīng)用的界面表面上沒什么反應(yīng),但是,如果你再多次按下Test按鈕,事件都會被記住,到時候會挨個響應(yīng)。只是現(xiàn)在程序斷在了第一次按下按鈕的時候。

我們讓程序繼續(xù)(如果在斷點期間多次按下按鈕,會有多次被斷住)。

圖14. 瀏覽器控制臺輸出

我們按下了6次,調(diào)試工具下也顯示出6次輸出。這是與調(diào)試網(wǎng)頁時的不同:當(dāng)調(diào)試網(wǎng)頁時,一旦執(zhí)行到斷點,瀏覽器的頁面其實就不可點擊了。

到這一步,是不是覺得使用RN開發(fā)也沒有那么難呢?

至于Toggle Inspector, Show Perf Monitor, Start/Stop Sampling Profiler和Dev Settings,我們暫時可以不用管它們。

目前已經(jīng)知道了調(diào)試設(shè)置中Remote JS Debugging, Live Reload和 Hot Reloading。相信我們已經(jīng)可以比較從容地Debug簡單的 RN應(yīng)用了。這里以Windows下的Android為例,其實在Mac下開發(fā)iOS也是相似的。

總結(jié)

希望本文的分享對嘗試RN的新手朋友有所幫助。如果大家對下篇想講的內(nèi)容有自己的想法,請留言告訴我,我們一定會認(rèn)真考慮。

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家也可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • React項目中應(yīng)用TypeScript的實現(xiàn)

    React項目中應(yīng)用TypeScript的實現(xiàn)

    TypeScript通常都會依賴于框架,例如和vue、react 這些框架結(jié)合,本文就主要介紹了React項目中應(yīng)用TypeScript的實現(xiàn),分享給大家,具體如下:
    2021-09-09
  • React官方團隊完善原生Hook閉包陷阱

    React官方團隊完善原生Hook閉包陷阱

    這篇文章主要為大家介紹了React官方團隊出手,補齊原生Hook短板閉包陷阱的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • redux功能強大的Middleware中間件使用學(xué)習(xí)

    redux功能強大的Middleware中間件使用學(xué)習(xí)

    這篇文章主要為大家介紹了redux功能強大的Middleware中間件使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 官方推薦react-navigation的具體使用詳解

    官方推薦react-navigation的具體使用詳解

    本篇文章主要介紹了官方推薦react-navigation的具體使用詳解,react-navigation是致力于解決導(dǎo)航卡頓,數(shù)據(jù)傳遞,Tabbar和navigator布局,支持redux。非常具有實用價值,需要的朋友可以參考下
    2018-05-05
  • React Native自定義Android的SSL證書鏈校驗

    React Native自定義Android的SSL證書鏈校驗

    這篇文章主要為大家介紹了React Native自定義Android的SSL證書鏈校驗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React可定制黑暗模式切換開關(guān)組件

    React可定制黑暗模式切換開關(guān)組件

    這篇文章主要為大家介紹了React可定制黑暗模式切換開關(guān)組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React Router 5.1.0使用useHistory做頁面跳轉(zhuǎn)導(dǎo)航的實現(xiàn)

    React Router 5.1.0使用useHistory做頁面跳轉(zhuǎn)導(dǎo)航的實現(xiàn)

    本文主要介紹了React Router 5.1.0使用useHistory做頁面跳轉(zhuǎn)導(dǎo)航的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 一文帶你搞懂react hooks的類型聲明

    一文帶你搞懂react hooks的類型聲明

    這篇文章主要給帶大家搞清楚react hooks的類型聲明,如果有同學(xué)還不清楚react hooks的類型聲明,來看本文就對了,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 使用React封裝一個Tree樹形組件的實例代碼

    使用React封裝一個Tree樹形組件的實例代碼

    這篇文章主要介紹了使用React封裝一個Tree樹形組件的實例,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • react常見的ts類型實踐解析

    react常見的ts類型實踐解析

    這篇文章主要為大家介紹了react常見的ts類型實踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論

罗城| 清水县| 淮北市| 宽城| 北川| 泾阳县| 利辛县| 含山县| 乌拉特前旗| 喀喇| 北安市| 邹平县| 江川县| 金秀| 黎平县| 历史| 昭觉县| 屏山县| 张家界市| 蓝山县| 开原市| 墨脱县| 饶平县| 伊金霍洛旗| 江华| 涡阳县| 萍乡市| 竹北市| 威海市| 克拉玛依市| 土默特左旗| 潼关县| 进贤县| 梅河口市| 会泽县| 昌平区| 彭州市| 香港 | 习水县| 太仆寺旗| 文昌市|