摘要:目前開發(fā)的項目中為了仿原生效果如果自己去通過重新實現(xiàn)的話成本極大所以不得不使用來作為前端庫??梢栽谶@個函數(shù)中清理在綁定的事件這個方式很有用。在開發(fā)過程中這些生命周期函數(shù)是我使用最頻繁最常見的操作。
一.項目所用的各種框架ReactJS作為目前最火的構建用戶界面的前端框架,為什么有那么多的前端工程師去追逐它,不僅因為它簡單,而且它提供了一系列強大的API讓我們擺脫以前繁瑣的DOM操作,使我們的邏輯更加清晰,代碼更加簡單。
Framework7不僅提供了UI界面,而且還封裝了一堆類似jQuery的DOM操作API,而ReactJS是facebook工程師開發(fā)的構建用戶界面的前端類庫,提供了強大的diff算法,在內存中直接操作虛擬DOM,所以Framework7和ReactJS結合,有點不倫不類。
因為我們只需要framework7提供的UI樣式,而并不需要它那一堆操作DOM的API,對于沒有接觸過ReactJS的新同學來說,思維肯定難以轉變,可以直接操作DOM那肯定比較爽,react通過state直接更改界面樣式的一邊玩去吧!所以造成開始進入這項目時,我也是直接操作DOM,所以造成前期代碼紊亂,后期維護困難。中途過程中,對于framework7沒有的dom操作API,我又引入的Jquery和各種類庫。
而且由于我們項目使用的是spa模式,所以造成后期通過webpack打包的bundle.js多達4M,在低端android機上,加載時間長達幾十秒。其實使用react開發(fā)的項目完全沒必要再引入操作DOM的前端框架,react操作虛擬DOM的性能和速度完全不是直接操作DOM可比的。那樣只會造成的應用的卡頓和加載緩慢。
目前開發(fā)的項目中為了仿原生ios效果(如果自己去通過React重新實現(xiàn)的話,成本極大),所以不得不使用Framedmework7來作為前端UI庫。
二.ReactJS簡單的介紹React 是一個 Facebook 和 Instagram 用來創(chuàng)建用戶界面的 JavaScript 庫。
很多人認為 React 是 MVC 中的 V(視圖)。
我們創(chuàng)造 React 是為了解決一個問題:構建隨著時間數(shù)據(jù)不斷變化的大規(guī)模應用程序。為了達到這個目標,React 采用下面兩個主要的思想。
1:僅僅只要表達出你的應用程序在任一個時間點應該長的樣子,然后當?shù)讓拥臄?shù)據(jù)變了,React 會自動處理所有用戶界面的更新
2:數(shù)據(jù)變化后,React 概念上與點擊“刷新”按鈕類似,但僅會更新變化的部分。
下面談談我對React上面兩個思想的理解:
1.React有著極其強大的API,當數(shù)據(jù)源發(fā)生改變,都會觸發(fā)Render,這也就意味著你只需要關注數(shù)據(jù)整體,其他的一切React這個框架會去完成,降低了開發(fā)的難度和邏輯的復雜程度。
2.當數(shù)據(jù)源改變之后,React會在內存中通過diff算法,去比較數(shù)據(jù)源是否發(fā)生更改,在去決定是否更改DOM。因為React有一個非常強大的虛擬DOM系統(tǒng),所以會在內存中去完成對DOM的所有操作,隨后在通過Render函數(shù)把對DOM的修改反應到實際DOM中。
許多人一聽,React那么強大,是不是很難?其實非也,React中API少的可憐,非常簡單易懂,最常用的也就幾個生命周期函數(shù)和Render。
三.React中的生命周期1.componentDidMount
組件已經(jīng)加載到DOM中會執(zhí)行這個函數(shù),在這個函數(shù)中可以初始化一些將要執(zhí)行的函數(shù),在React生命周期中只會執(zhí)行一次。在開發(fā)中,在該函數(shù)中執(zhí)行的setState,在隨后通過this.state并不能夠馬上拿到,可以通過定時來獲取。
2.componentWillMount
在組件將要掛載到DOM中執(zhí)行,這個函數(shù)我基本上很少用到。初始化工作我基本上在constructor和componentDidMount中去完成。
3.componentWillUnmount
組件從DOM中移除會執(zhí)行這個函數(shù),在此可以清理無用的DOM和事件。
4.componentWillUpdate
組件將要更新執(zhí)行??梢栽谶@個函數(shù)中清理在componentDidUpdate綁定的事件(這個方式很有用)。
5.componentDidUpdate
組件已經(jīng)更新執(zhí)行這個操作??梢栽谶@個函數(shù)中初始化需要state中的數(shù)據(jù)源作為參數(shù)的函數(shù)。為了防止初始化多次,可以在componentWillUpdate中清理??聪旅孢@個需求:
需要實現(xiàn)一個一元奪寶模塊,導航欄下有一個tab欄顯示一元奪寶共進行了多少期,當前期數(shù)默認第一個tab顯示(可滑動)。如下圖:
這個使用的是swiper.js來實現(xiàn)的。只能在從服務器獲取到期數(shù)后實現(xiàn),所以我們在compoenntDidUpdate中去初始化:
但是我們同時可能又會去獲取購物車數(shù)量等等進行其他更新state的操作,根據(jù)React的生命周期,只要state發(fā)生改變,就有可能(shouldComponentUpdate返回true)會去執(zhí)行componentDidUpdate。這樣就會造成這個函數(shù)的多次初始化。所以我們必須在componentWillUpdate中去判斷把已經(jīng)初始化的函數(shù)進行清理,避免造成多次初始化。
6.shouldComponentUpdate
這個函數(shù)提供給我們這些開發(fā)者是否允許數(shù)據(jù)源發(fā)生改變后去執(zhí)行Render的控制權。默認這個函數(shù)始終返回true。返回false的話,render函數(shù)不會執(zhí)行,componentWillUpdate和componentDidUpdate也不會執(zhí)行。可以在這個函數(shù)中去執(zhí)行邏輯判斷,是否有必要去執(zhí)行Render。為了追求更高的性能??梢允謩尤タ刂剖欠駡?zhí)行Render。
在開發(fā)過程中這些生命周期函數(shù)是我使用最頻繁最常見的React操作。
學習React,只要掌握我們只關心數(shù)據(jù)源,并進行setState,去更新state觸發(fā)Render就ok了。到此為止,React中的生命周期大致記錄到這,以備忘記,進行復習只用。
React入門并不難,但是深入.....
作者信息
原文作者系力譜宿云 LeapCloud 團隊_UX成員:zhiyingzzhou 【原創(chuàng)】
首發(fā)地址:https://blog.maxleap.cn/archi...
作者簡介:前端新人,現(xiàn)任MaxLeap UX團隊成員,主要從事于react開發(fā),一直對hybrid混合app感興趣。
相關文章
webpack 入門
關于我們
MaxLeap 為App開發(fā)、運營提供一站式后端云服務, 包括應用開發(fā)所需的后端云數(shù)據(jù)庫、云數(shù)據(jù)源、云代碼、云容器、 IM、移動支付、應用內社交、第三方登錄、社交分享等基礎服務,以及針對應用運營的數(shù)據(jù)分析、推送營銷,用戶支持等服務, 覆蓋移動應用的研發(fā)、運營完整生命周期,致力于讓移動應用開發(fā)運營更快速簡單。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/90836.html
摘要:前言在應用開發(fā)中,列表是我們使用頻率非常高的一種展現(xiàn)形式,在項目中更是如此。無處不在的使用更是需要我們小心觸發(fā)性能瓶頸的深水炸彈。不要用索引當值要求我們對列表中的每一項設置一個唯一的值,這個虛擬的算法有很大關系。 前言 在應用開發(fā)中,列表是我們使用頻率非常高的一種展現(xiàn)形式,在reactjs項目中更是如此。無處不在的使用更是需要我們小心觸發(fā)性能瓶頸的深水炸彈。 下面就我最近的總結出的幾點...
摘要:文章圖片存儲在,網(wǎng)速不佳的朋友,請看使用心得加速雙刃劍或者來我的技術小站本文以騰訊云平臺的服務為例,記錄下在個人網(wǎng)站開發(fā)和公司項目實戰(zhàn)中的對使用的心得便宜沒好貨。此時,更應該使用來提速。 文章圖片存儲在GitHub,網(wǎng)速不佳的朋友,請看《CDN 使用心得:加速雙刃劍》 或者 來我的技術小站 godbmw.com 本文以騰訊云平臺的 CDN 服務為例,記錄下在個人網(wǎng)站開發(fā)和公司項目實戰(zhàn)中...
摘要:文章圖片存儲在,網(wǎng)速不佳的朋友,請看使用心得加速雙刃劍或者來我的技術小站本文以騰訊云平臺的服務為例,記錄下在個人網(wǎng)站開發(fā)和公司項目實戰(zhàn)中的對使用的心得便宜沒好貨。此時,更應該使用來提速。 文章圖片存儲在GitHub,網(wǎng)速不佳的朋友,請看《CDN 使用心得:加速雙刃劍》 或者 來我的技術小站 godbmw.com 本文以騰訊云平臺的 CDN 服務為例,記錄下在個人網(wǎng)站開發(fā)和公司項目實戰(zhàn)中...
摘要:目前只是體會到組件之間傳遞的值的初始來源一般都是值,可能是實踐不夠的原因。。。此時,可以建一個組件內部封裝一個構造函數(shù),內部封裝三個方法。 PS:開頭的一段廢話 ???????想起一個月前還不知道reactjs該如何下手的而今天有點小體會,還是有點小欣慰,不過回望一些走過的坑和開始時的滿頭漿糊覺得還是有點恐怖的。今天分享一點實踐中的小心得給新手朋友們。 reactjs的es6語法形式 ...
閱讀 561·2021-11-25 09:44
閱讀 2648·2021-11-24 09:39
閱讀 2322·2021-11-22 15:29
閱讀 3534·2021-11-15 11:37
閱讀 3402·2021-09-24 10:36
閱讀 2526·2021-09-04 16:41
閱讀 1006·2021-09-03 10:28
閱讀 1867·2019-08-30 15:55