使用React框架遇到的坑及解決方法

ec3y 10年前發布 | 345K 次閱讀 React 移動開發

這是我的原創文章,原始地址:http://h5shop.org/article/50/

使用React框架遇到的坑及解決方法

最近在公司的一個移動端WEB產品中使用了React這個框架(并不是React-Native),記錄一下在開發過程中遇到的各種問題以及對應的解決方法,希望能對讀者有所幫助。

React原則

React不多做介紹,就是非死book的一個開源JS框架,專注的層面為View層,不包括數據訪問層或者那種Hash路由(不過React 有插件支持),與Angularjs,Emberjs等大而全的框架不同,React專注的中心是Component,即組件,React認為一切頁面元 素都可以抽象成組件,比如一個表單,或者表單中的某一項。

常用技術要點

props

每一個組件都有可變與不可變的屬性,props就是不可變的屬性,當props改變時,組件的繪制方法不會被調用。

states

states就是組件的可變屬性,states的改變會觸發組件的render函數,react與其他mvvm框架的最大的不同點就是,react 組件可以想象成一個狀態機,狀態的改變會重繪UI,然后根據 dom diff 算法來繪制UI,而其他的mvvm框架則是對js對象的dirty check(Angularjs)或者defineProperty時指定的回調函數(Emberjs),因此,狀態機制與dom diff的存在聲稱React更快。

我們在設計React組件時如何靈活的運用props與state是一個非常關鍵的要點。

refs

refs這個點主要用在上級組件調用下級組件的場景,這個場景非常多見。

componentDidMount

組件UI渲染完畢后調用,常用在這種業務場景:調用ajax獲得數據后,渲染UI。

state的改變會觸發render

正如上文中所說,React組件是一個一個狀態機,state的改變會改變狀態,會觸發重繪,對于state的設計是對React組件設計的關鍵。

各種坑

觸摸事件

React中的觸摸事件僅用三種,touchstart, touchend, touchend,可是這種會有問題,有時候我需要滾動頁面的時候,很容易觸發某一個元素的touchend事件,為此筆者找了一個React第三方組件,React-tappable

還無意中發現一個Android與iOS的不同之處

input在disable且readonly之后,onClick會在iOS上觸發不起來,onTouchEnd又會在Android上把鍵盤彈出來,這邊筆者做了個Hack,iOS下用onTouchEnd,Android下用onClick,就正常了。

高級技術要點

mixin

曾經跟一個朋友討論,封裝utils模塊為純js模塊好還是React式的模塊好的問題,他給我了一個概念,React mixin,本來自己在開發中確實寫了很多可復用的小組件,但由于沒有過多的了解React周邊的相關知識,因此忽略了React mixin,筆者認為以后可以探究一下這個技術點。

 本文由用戶 ec3y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!