成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React Native For Android

Seay / 1460人閱讀

摘要:最后一步就是要綁定事件不懂的可以自己查閱官方文檔與提供了與方法來控制的路線,相當(dāng)于我們熟知的棧。為初始化數(shù)據(jù)源可以通過狀態(tài)來進(jìn)行保存。詳情發(fā)布日期提供了四個(gè)參數(shù)這里主要是利用來獲取數(shù)據(jù)源。

前言

React Native有點(diǎn)大勢(shì)所趨,所以前段時(shí)間研究了下它,看了它的官方文檔同時(shí)也在Github瀏覽了前輩們的杰作,所以自己也寫了一個(gè)簡單的Demo也算是一個(gè)好的入門。配合官方文檔與代碼實(shí)例相信都能很快的進(jìn)入React Native的世界。下面我介紹的不會(huì)很詳細(xì),是針對(duì)React Native語法有一定會(huì)基礎(chǔ)的同學(xué)。

React Native介紹

這里簡單的介紹下React Native

它是借助于FaceBook現(xiàn)有的輪子,它可以實(shí)現(xiàn)對(duì)ISOAndroid兩大平臺(tái)的支持

使用React.js來操作原生的UI組件,替代了DOM元素

UI方面,提供了Flexbox的布局,同時(shí)也支持css-layout樣式

使用JSX來轉(zhuǎn)換成JS來執(zhí)行,JSX是一種類似于XML語法的腳步擴(kuò)展語言。

對(duì)于React Native的環(huán)境搭建,可以參考官方文檔Getting Started,如果英文不好的別急,這里還有中文版的Getting Started

推薦使用英文版的,中文版的還是存在坑,下面簡單的介紹下Demo中用到的組件
Navigator

這是一個(gè)導(dǎo)航器,直白的理解就是實(shí)現(xiàn)界面之間的跳轉(zhuǎn),在React Native中借助它能很好的實(shí)現(xiàn)界面的切換。實(shí)現(xiàn)它需要實(shí)現(xiàn)幾個(gè)必要的方法。

 Navigator.SceneConfigs.FloatFromLeft}
          renderScene={this.renderScene}/>
initialRoute

Navigator都是由route來控制跳轉(zhuǎn)路線的,所以開始使用時(shí)要初始化route

initialRoute={{title: "主頁", component: Welcome}}

里面的參數(shù)名不受限制,但是你必須要指明跳轉(zhuǎn)的Componnet組件名,方便在后續(xù)執(zhí)行中取出??梢酝ㄟ^route.component取出。

renderScene

該配置就是執(zhí)行沒一個(gè)route的具體實(shí)現(xiàn),從而渲染出來,它提供兩個(gè)內(nèi)置參數(shù)routenavigator,來方便渲染

renderScene={this.renderScene}
renderScene(route, navigator){
    _navigator = navigator;
    let DefaultComponet = route.component;
    return 
  }

renderScene中我們?nèi)〕雒看我獙?dǎo)航的Component,同時(shí)渲染出來,并且把routenavigator傳到渲染的界面中。在渲染界面可以通過this.props.routthis.props.navigator來獲取。最后一步就是要綁定事件

this.renderScene = this.renderScene.bind(this);
不懂props的可以自己查閱官方文檔
push與pop

Navigator提供了pushpop方法來控制route的路線,相當(dāng)于我們熟知的棧。通過push來設(shè)置下一個(gè)導(dǎo)航的route,通過pop來退出該界面返回原來的界面。

 this.props.navigator.push({
        title: "詳情",
        component: Detail,
        number: rowID,
      })}>
      
        
          
            {rowData.title}
          
          ....
      
      

TouchableOpacity是一個(gè)點(diǎn)擊監(jiān)聽組件,可以綁定點(diǎn)擊事件。

 this.props.navigator.pop()}>
            
          

在點(diǎn)擊以后渲染出來的界面中調(diào)用pop方法退出該渲染.

ListView

是不是感覺很親切,它要實(shí)現(xiàn)的功能跟Android中是一樣的。但是使用方法就不同了哦。不過整體需要的數(shù)據(jù)原理還是類似。無非也要整個(gè)的數(shù)據(jù)源,與綁定沒個(gè)Item的數(shù)據(jù)。

rowHasChanged

在渲染之前要設(shè)置判斷該數(shù)據(jù)是否需要從新渲染,這樣就減少許多不必要的渲染步驟,該方法能幫助我們進(jìn)行判斷。

const listView = new ListView.DataSource({
      rowHasChanged: (r1,r2) => r1!==r2});
cloneWithRows

listView初始化數(shù)據(jù)源,可以通過state狀態(tài)來進(jìn)行保存。

this.state={
      dataSource: listView.cloneWithRows(this._rowData())};
  }
綁定

最后在渲染render()生命周期方法中進(jìn)行組件資源綁定:


          

其中dataSourcerenderRow是兩個(gè)必要的方法,前一個(gè)是綁定數(shù)據(jù)源,后一個(gè)是綁定渲染的每一行的數(shù)據(jù)。其中_renderRowItem的布局。

_renderRow(rowData,sectionID,rowID,highlightRow){
    return(
     this.props.navigator.push({
        title: "詳情",
        component: Detail,
        number: rowID,
      })}>
      
        
          
            {rowData.title}
          
          
            
              {"發(fā)布: "+rowData.fb}
            
            
              {"日期: "+rowData.data}
            
          
        
        
      
      
    );
  }

renderRow提供了四個(gè)參數(shù)rowData,sectionID,rowID,highlightRow這里主要是利用rowData來獲取數(shù)據(jù)源。布局樣式是使用css-layout來實(shí)現(xiàn),可以直接在組件是使用

style={{flex: 1}}

或者通過StyleSheet來統(tǒng)一創(chuàng)建:

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#F5FCFF",
  },
  title: {
    backgroundColor: "royalblue",
    justifyContent: "center",
    alignItems: "center",
    borderColor: "gray",
    borderBottomWidth: 1,
  },
  ...
});
css這里不多說,自己可以參考官方文檔
TabNavigator

這里再簡單介紹下TabNavigator這是一個(gè)類似于Android中的FragmentTabHost。相信都知道它的功能是什么了。


         }
          renderSelectedIcon={() => }
          onPress={() => this.setState({selectedTab: "news"})}>
          
        
        ...

通過子標(biāo)簽來設(shè)置每一個(gè)底部Item,在其中在設(shè)置該Item要渲染的界面,上面的News就是要渲染的界面,該界面可以通過export default News導(dǎo)出,import News from "./News"導(dǎo)入。

先就介紹到這里,如果還有需要可以下載源碼,后續(xù)還會(huì)繼續(xù)再做擴(kuò)展
效果圖

項(xiàng)目地址:https://github.com/idisfkj/RN...
個(gè)人blog:https://idisfkj.github.io

關(guān)注

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/111496.html

相關(guān)文章

  • React Native植入原生Android應(yīng)用的流程解析

    摘要:在應(yīng)用內(nèi)添加依賴回到,到的文件級(jí)別的里添加依賴最后一行的就是我們新增的,注意這里的版本號(hào)要和里的一致。因此,建議用這樣的寫法,并檢查版本號(hào)是否和里的一致。 引言 React Native是現(xiàn)在移動(dòng)開發(fā)新的可選方案,也帶來了原屬于Web領(lǐng)域的React的優(yōu)秀開發(fā)特性。另一方面,React Native的技術(shù)棧一經(jīng)掌握,可以用于iOS、Android及Windows(見此)多個(gè)平臺(tái),即所說...

    worldligang 評(píng)論0 收藏0
  • #react-native BUG#

    摘要:重啟再次點(diǎn)擊應(yīng)該就不會(huì)報(bào)錯(cuò)了替換成下面的這個(gè),即在加一個(gè)運(yùn)行下面的命令清除緩存然后在嘗試直接根據(jù)端口找進(jìn)程可以得到一個(gè)殺死進(jìn)程在寫項(xiàng)目的時(shí)候剩余運(yùn)算符解析報(bào)錯(cuò)。 這篇文章主要解決react-native中遇到的bug。環(huán)境:window10 Error: Command failed: gradlew.bat installDebug 編譯并運(yùn)行 React Native 應(yīng)用之前我們...

    william 評(píng)論0 收藏0
  • React Native Vs. Xamarin Vs. Ionic Vs. Flutter

    React Native Vs. Xamarin Vs. Ionic Vs. Flutter:Which Is Best For Cross-Platform Mobile App Development? While developing Native Mobile Apps, Android apps are written in Java, and iOS ones in Swift and...

    Clect 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.4 - 這份 Android 有點(diǎn)甜

    摘要:閱讀本期周刊,你將快速入門,開啟甜蜜之旅。然則的原理負(fù)責(zé)發(fā)送以及處理消息,創(chuàng)建消息隊(duì)列并不斷從隊(duì)列中取出消息交給,則用于保存消息。 showImg(/img/bVCN99?w=900&h=385); 2016 年 8 月,Android 7.0 Nougat(牛軋?zhí)牵┱桨l(fā)布,那么問題來了,你 Marshmallow 了么(? -? ?) Cupcake、Donut、Gingerbre...

    jay_tian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<