摘要:最后一步就是要綁定事件不懂的可以自己查閱官方文檔與提供了與方法來控制的路線,相當(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ì)ISO和Android兩大平臺(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è)必要的方法。
initialRouteNavigator.SceneConfigs.FloatFromLeft} renderScene={this.renderScene}/>
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ù)route與navigator,來方便渲染
renderScene={this.renderScene}
renderScene(route, navigator){ _navigator = navigator; let DefaultComponet = route.component; return}
在renderScene中我們?nèi)〕雒看我獙?dǎo)航的Component,同時(shí)渲染出來,并且把route與navigator傳到渲染的界面中。在渲染界面可以通過this.props.rout與this.props.navigator來獲取。最后一步就是要綁定事件
this.renderScene = this.renderScene.bind(this);
不懂props的可以自己查閱官方文檔push與pop
Navigator提供了push與pop方法來控制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)行組件資源綁定:
其中dataSource與renderRow是兩個(gè)必要的方法,前一個(gè)是綁定數(shù)據(jù)源,后一個(gè)是綁定渲染的每一行的數(shù)據(jù)。其中_renderRow是Item的布局。
_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"})}>
通過
先就介紹到這里,如果還有需要可以下載源碼,后續(xù)還會(huì)繼續(xù)再做擴(kuò)展效果圖
項(xiàng)目地址:https://github.com/idisfkj/RN...
個(gè)人blog:https://idisfkj.github.io
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/111496.html
摘要:在應(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),即所說...
摘要:重啟再次點(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)用之前我們...
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...
摘要:閱讀本期周刊,你將快速入門,開啟甜蜜之旅。然則的原理負(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...
閱讀 1856·2021-08-13 15:06
閱讀 3136·2021-08-05 10:02
閱讀 3438·2019-08-30 15:55
閱讀 2424·2019-08-30 13:46
閱讀 2529·2019-08-30 13:01
閱讀 1360·2019-08-29 17:17
閱讀 2854·2019-08-29 15:27
閱讀 1461·2019-08-29 11:12