React-native觸摸組件

一. Touchable系列組件

  1. RN的組件基本上默認都是不支持點擊事件彤断,也不能響應基本觸摸事件

  2. 不透明觸摸TouchableOpacity

    1. 該組件封裝了響應觸摸事件凝果,當點擊按下的時候,該組件的透明度會降低

    2. 常用屬性

      activeOpacity number

      設置組件在進行觸摸的時候哲嘲,顯示的不透明度(取值0-1之間)
      

      onHideUnderlay function方法

      當?shù)讓颖浑[藏的時候調(diào)用
      

      onShowUnderlay function方法

      當?shù)讓语@示的時候調(diào)用
      

      style

      可以設置控件的風格演示,該風格演示可以參考View組件的style
      

      underlayColor

      當觸摸或者點擊控件的時候顯示出的顏色

  3. 常見的觸摸事件

    注意:調(diào)用得用箭頭函數(shù)

    1. onPress 點擊

    2. onPressIn 按下

    3. onPressOut 抬起

    4. onLongPress 長按不放

二. 組件的聲明周期

  1. ReactNative組件的聲明周期大致上可以劃分為實例化階段竞膳、存在階段挽铁、銷毀階段卸耘,

  2. 最常用的為實例化階段,該階段就是組件的構建伍俘、展示時期邪锌,需要我們根據(jù)幾個函數(shù)的調(diào)用過程,控制好組件的展示和邏輯的處理

  3. 實例化階段函數(shù)功能分析

 1) getDefaultProps

    a. 改函數(shù)用于初始化一些默認的屬性癌瘾,通常會將固定的內(nèi)容放在這個函數(shù)中進行賦值

    b. 在組件中觅丰,可以利用this.props獲取這里屬性,由于組件初始化后妨退,再次使用該組件不會調(diào)用getDefaultProps函數(shù)妇萄,所以組件自己不可以自己修改props蜕企,只可有其他組件調(diào)用它時在外部修改

    c. 使用組件時,可以自定義屬性冠句,在該組件內(nèi)部使用this.props.xxx獲取到

 2) getInitialState

    a. 該函數(shù)是用于對組件的一些狀態(tài)進行初始化轻掩,由于該函數(shù)不同于getDefaultProps,在以后的過程中,會再次調(diào)用懦底,所以可以將控制控件的狀態(tài)的一些變量放在這里初始化唇牧,如控件上顯示的文字,可以通過this.state來獲取值基茵,通過this.setState來修改state值奋构,比如

      this.setState({
        activePage: activePage, 
        currentX: contentOffSetX  
      });

    b. 一旦調(diào)用了this.setState方法,組件一定會調(diào)用render方法拱层,對組件再次進行渲染弥臼,不過,react框架會自動根據(jù)DOM的狀態(tài)來判斷是否需要真正的渲染

 3) componentWillMount

    在組件將要被加載在視圖之前調(diào)用根灯,功能相對較少
  1. render

    a. render是一個組件中必須有的方法径缅,本質(zhì)上是一個函數(shù),并返回JSX或其他組件來構成DOM,和Android的XML布局類似烙肺,只能返回一個頂級元素

    b. 在render函數(shù)中纳猪,只可通過this.state和this.props來訪問在之前函數(shù)中初始化的數(shù)據(jù)值

  2. componentDidMount

    a. 在調(diào)用了render方法后,組件加載成功并被成功渲染出來以后桃笙,所要執(zhí)行的后續(xù)操作氏堤,一般會在這個函數(shù)中處理網(wǎng)絡請求等加載數(shù)據(jù)的操作

    b. 因為UI已經(jīng)成功被渲染出來,所以放在這個函數(shù)里進行請求操作搏明,不會出現(xiàn)UI上的操作

  3. 存在期階段函數(shù)功能分析

 1) componentWillReceiveProps

     指父元素對控件的props或state進行了修改

 2) shouldComponentUpdate

     一般用于優(yōu)化鼠锈,可以返回false或true來控制是否進行渲染

 3) componentWillUpdate

      組件刷新前調(diào)用,類似componentWillMount

 4) componentDidUpdate

      更新后的hook 
  1. 銷毀期階段函數(shù)功能分析

    1. 用于清理一些無用的內(nèi)容星著,如:點擊事件Listener,只有一個過程componentWillUnmount
  2. 注意

  3. this.props表示那些一旦定義购笆,就不再改變的特性

  4. this.state是會隨著用戶互動而產(chǎn)生變化的特性

三. 獲取真實的DOM節(jié)點

  1. 有時需要獲取真實的DOM的節(jié)點,這就要用到ref屬性

    <TextInput ref="myTextInput">

    this.refs.myTextInput

四. ScrollView組件

  1. ScrollView是一個通用的可滾動的容器虚循,你可以在其中放入多個組件和視圖同欠,而且這些組件并不需要是同類型的。ScrollView不僅可以垂直滾動横缔,還能水平滾動(通過horizontal屬性來設置)铺遂。

  2. 可以幫我們做輪播圖和引導頁等一些可以滾動的效果

  3. ScrollView中常用的屬性

    1. contentContainerStyle

      這些樣式會應用到一個內(nèi)層容器上,所有的子視圖都會包裹在內(nèi)容容器里

    2. horizontal

      當次屬性為true的時候剪廉,所有的子視圖會在水平方向上排成一行

    3. keyboardDismissMode

      用戶拖拽滾動視圖時娃循,是否要隱藏軟鍵盤

      none:拖拽時不隱藏軟鍵盤

      on-drag: 當拖拽開始的時候隱藏軟鍵盤

      interactive:軟鍵盤伴隨拖拽操作同步地消失,并且如果往上滑動會恢復鍵盤斗蒋,安卓設備上不支持這個選項捌斧,會表現(xiàn)的和none一樣

    4. keyboardShouldPersistTaps

      false: 在軟鍵盤激活之后笛质,點擊焦點文本輸入框意外的地方,鍵盤就會隱藏

      true: 滾動視圖不會響應點擊操作捞蚂,并且鍵盤不會自動消失妇押,默認值為false

    5. onScroll

      在滾動過程中,每幀最多調(diào)用一次此回調(diào)函數(shù)姓迅,調(diào)用的頻率可以用scrollEventThrottle屬性來控制

    6. refreshControl:element

      指定RefreshControl組件敲霍,用于為ScrollView提供下拉刷新功能

    7. removeClippedSubviews:

      true: 當此屬性為true時,屏幕之外的子視圖(子視圖overflow樣式需要設為hidden)會被移除丁存,這個可以提升大列表的滾動性能肩杈,默認值為true

    8. showsHorizontalScrollIndicator bool

      true: 顯示一個水平方向的滾動條。

    9. showsVerticalScrollIndicator bool

      true: 顯示一個垂直方向的滾動條解寝。

    10. OnMomentumScrollEnd

    當一幀滾動完畢的時候調(diào)用
    
    1. onScrollBeginDrag
    當開始手動拖拽的時候調(diào)用
    
    1. onScrollEndDrag
    當結束手動拖拽的時候調(diào)用
    

五. 補充

  1. DOM Diff算法

    1. web界面由DOM樹來構成扩然,當其中某一部分發(fā)生變化時,其實就是對應某個DOM節(jié)點發(fā)生了變化

    2. 在React中聋伦,構建UI界面的思路是由當前狀態(tài)決定界面夫偶,前后兩個狀態(tài)就是對應兩套界面,然后由React來比較兩個界面的區(qū)別觉增,這就需要對DOM樹進行DIff算法分析找到變化的部分兵拢,然后只更新變化的內(nèi)容

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逾礁,隨后出現(xiàn)的幾起案子说铃,更是在濱河造成了極大的恐慌,老刑警劉巖嘹履,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件截汪,死亡現(xiàn)場離奇詭異,居然都是意外死亡植捎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門阳柔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焰枢,“玉大人,你說我怎么就攤上這事舌剂〖贸” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵霍转,是天一觀的道長荐绝。 經(jīng)常有香客問我,道長避消,這世上最難降的妖魔是什么低滩? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任召夹,我火速辦了婚禮,結果婚禮上恕沫,老公的妹妹穿的比我還像新娘监憎。我一直安慰自己,他們只是感情好婶溯,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布鲸阔。 她就那樣靜靜地躺著,像睡著了一般迄委。 火紅的嫁衣襯著肌膚如雪褐筛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天叙身,我揣著相機與錄音渔扎,去河邊找鬼。 笑死曲梗,一個胖子當著我的面吹牛赞警,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虏两,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼愧旦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了定罢?” 一聲冷哼從身側(cè)響起笤虫,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祖凫,沒想到半個月后琼蚯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡惠况,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年遭庶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稠屠。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡峦睡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出权埠,到底是詐尸還是另有隱情榨了,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布攘蔽,位于F島的核電站龙屉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏满俗。R本人自食惡果不足惜转捕,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一作岖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓜富,春花似錦鳍咱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至价捧,卻和暖如春丑念,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背结蟋。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工脯倚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嵌屎。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓推正,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宝惰。 傳聞我的和親對象是個殘疾皇子植榕,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容