ReactNative學習筆記2

一邓了、Flexbox布局

1.容器屬性

(1)flexDirection
  • row 水平布局
  • column 豎直布局(默認方式)
(2)flexWrap

決定其子元素沿著軸線的排列成一行或者空間不夠后自動換行

  • nowrap 不自動換行(默認方式)
  • wrap 自動換行
(3)justifyContent

決定其子元素沿著主軸的排列方式

  • flex-start
  • center
  • flex-end
  • space-around
  • space-between
(4)align-items

決定其子元素沿著交叉軸的排列方式

  • flex-start
  • flex-end
  • center
  • baseline
  • stretch

2.元素屬性

(1)alignSelf

允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性。

  • auto (默認方式)
  • flex-start
  • center
  • flex-end
  • stretch
(2)圖片
  • contain
  • cover
  • stretch
(3)定位(相對定位和絕對定位)

和top熊响、left配合使用

  • absolute
  • relative
(4)text

Text之間存在屬性繼承

  • textAlign enum("auto", 'left', 'right', 'center')
  • lineHeight number
  • writingDirection enum("auto", 'ltr', 'rtl')
  • numberOfLines number( 需要放在最外層的Text元素上铭若,且雖然截取了文字但是還是會占用空間)

3.公共屬性

(1)flex

權重,類似安卓布局中的layout_weight屬性。

(2) 盒子模型(margin和padding)

和Android儿捧、css中一樣

二、ListView-多個布局樣式

1.數據結構

目前支持如下的數據結構

  • { sectionID_1: { rowID_1: rowData1, ... }, ... }
  • { sectionID_1: [ rowData1, rowData2, ... ], ... }
  • [ [ rowData1, rowData2, ... ], ... ]

大多數情況下我們會用到第二種(字典套數組)和第三種(純數組),每一個數組對應的key系統(tǒng)會自動提取成sectionId。然后我們可以根據sectionId來判斷所加載的section吴裤。

如果是純數組(無section),使用cloneWithRows(dataBlob, rowIdentities) 該方法接收兩個參數,dataBlob是原始數據源吱晒。在沒有section的時候使用此方法,傳入一個數組。rowIdentities為可選類型喉酌,為數據源的每一項指明一個id。默認的id為字符串'0','1','2'...dataBlob.count霹陡。

如果是字典套數組的結構(有section)攒霹,我們使用下面的方法為數據源賦值伏社。sectionIdentities和rowIdentities都是可選類型。 cloneWithRowsAndSections(dataBlob, sectionIdentities, rowIdentities)

代碼示例:

//數據結構
const datas={
    sectionWithTitle:[
        {
            title:'精選菜單',
            pic:'http://image.hongbeibang.com/FjigYOhuPOLLS6M4F5ejd6psqCcI?801X312&imageMogr2/strip/thumbnail/750x750'
        },
        {
            title:'熱門菜單',
            pic:'http://image.hongbeibang.com/Fof924bIoB1hqE2MTs38bBcGEzk3?802X313&imageMogr2/strip/thumbnail/750x750'
        }
    ],
    sectionWithoutTitle:[
        {
            pic:'http://image.hongbeibang.com/FqBRH1E0EP2I488s7DXww1RVGQOF?801X311&imageMogr2/strip/thumbnail/750x750'
        },
        {
            pic:'http://image.hongbeibang.com/FulhGNdLtEmHKTKkLX0cLjlH9Wxi?802X312&imageMogr2/strip/thumbnail/750x750'
        },
        {
            pic:'http://image.hongbeibang.com/FkC4ySvlw9--96qkfJfFNeG9AgMa?800X313&imageMogr2/strip/thumbnail/750x750'
        }
    ]
};

//構造方法
constructor(props){
        super(props);
        const ds = new ListView.DataSource(
            {
                rowHasChanged:(r1,r2)=>r1!==r2,//判斷不同item行是否相同
                sectionHeaderHasChanged:(s1,s2)=>s1!==s2//不同之處摘昌,還應判斷section是否相同
            });

        this.state={
            dataSource:ds,
            isLoaded:false
        }
    }

//渲染方法
render() {

        if(!this.state.isLoaded){
            return this.renderLoading()
        }

        return (
            <ListView
                dataSource={this.state.dataSource}
                renderRow={(rowData,sectionId,rowId)=>this.renderSections(rowData,rowId,sectionId)}//注意不同之處速妖。可以拿到sectId
            />
        );
    }

 //更新數據
  componentDidMount(){

        var that = this;
        var change =function () {
            that.setState({
                dataSource:that.state.dataSource.cloneWithRowsAndSections(datas),//注意調用方法的差別
                isLoaded:true
            })
        };

        setTimeout(change,1000);

    }       

三聪黎、封裝獨立組件

父組件向子組件傳值方式:props(上一篇文章已總結過)

子組件向父組件傳值

  • 1.EventEmitter
    簡單的觀察者模式罕容。發(fā)送端發(fā)送通知,接收端接受到通知后稿饰,通過狀態(tài)機來改變渲染锦秒。發(fā)送端和接受端同時需要引入DeviceEventEmitter組件。

代碼示例:

//父組件
DeviceEventEmitter.addListener("監(jiān)聽事件名",(來自子組件的參數1喉镰,來自子組件的參數2,...)=>{
    //父組件收到數據后進行操作
})

//子組件
DeviceEventEmitter.emit("監(jiān)聽事件名",傳遞給父組件的參數1旅择,傳遞給父子組件的參數2,...)
  • 2.callback

代碼示例:

//第一個頁面
ToNextView(){
    this.props.navigator.push({
        component:NextView,
        passProps:{
            callback:((接受的參數)=>{
                this.seedToSecond(接受的參數)
            })
        }
    })
}

//第二個頁面
popToHome(){
    this.props.navigatior.pop();
    this.props.callback('要傳遞的參數')
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侣姆,隨后出現的幾起案子砌左,更是在濱河造成了極大的恐慌,老刑警劉巖铺敌,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汇歹,死亡現場離奇詭異,居然都是意外死亡偿凭,警方通過查閱死者的電腦和手機产弹,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痰哨,你說我怎么就攤上這事胶果。” “怎么了斤斧?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵早抠,是天一觀的道長。 經常有香客問我撬讽,道長蕊连,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任游昼,我火速辦了婚禮甘苍,結果婚禮上,老公的妹妹穿的比我還像新娘烘豌。我一直安慰自己载庭,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布廊佩。 她就那樣靜靜地躺著囚聚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪标锄。 梳的紋絲不亂的頭發(fā)上靡挥,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音鸯绿,去河邊找鬼跋破。 笑死,一個胖子當著我的面吹牛瓶蝴,可吹牛的內容都是我干的毒返。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼舷手,長吁一口氣:“原來是場噩夢啊……” “哼拧簸!你這毒婦竟也來了?” 一聲冷哼從身側響起男窟,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤盆赤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后歉眷,有當地人在樹林里發(fā)現了一具尸體牺六,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年汗捡,在試婚紗的時候發(fā)現自己被綠了淑际。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖春缕,靈堂內的尸體忽然破棺而出盗胀,到底是詐尸還是另有隱情,我是刑警寧澤锄贼,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布票灰,位于F島的核電站,受9級特大地震影響宅荤,放射性物質發(fā)生泄漏屑迂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一膘侮、第九天 我趴在偏房一處隱蔽的房頂上張望屈糊。 院中可真熱鬧的榛,春花似錦琼了、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抹竹,卻和暖如春鸯屿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凶掰。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工燥爷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懦窘。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓前翎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畅涂。 傳聞我的和親對象是個殘疾皇子港华,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容

  • 移動開發(fā)基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,453評論 0 6
  • 原文地址1,原文地址2,本文為原文不完全翻譯 Hello World 所有的程序皆由Hello World開始,下...
    saiGo閱讀 204評論 0 0
  • H5移動端知識點總結 閱讀目錄 移動開發(fā)基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,395評論 0 26
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,728評論 1 92
  • <一>編寫Hello World React Native看起來很像React午衰,只不過其基礎組件是原生組件而非we...
    AFinalStone閱讀 1,021評論 0 2