• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • React Native學習筆記(2)--新聞列表實現

    本篇是在學習《React Native入門與實戰》這本書時做的筆記,代碼基于React Native 0.44實現的,算是對該書中代碼的小小更新。

    Text組件是一個用來展示文本的組件。我們可以給它設置按下動作(onPress),設置它的行數(numberOfLines)。
    書中的新聞列表包括三部分,頭部、列表項和要聞。效果如下圖:

    這里寫圖片描述

    與上篇九宮格不同的是,我們將這三部分分別封裝起來,即:Header,List,ImportantNews,這樣,我們只需要在index.ios.js中引入這些組件即可,這樣即達到了封裝的效果,也可以重復使用這些自定義組件。

    1.封裝頭部組件

    頭部組件包括四個部分,三種文字樣式,另外還有一個紅色的底線。我們創建新的文件header.js(與index.ios.js在同一個目錄)。代碼很簡單:

    //引入需要的組件
    import React, {Component} from 'react';
    import {
        AppRegistry,
        StyleSheet,
        View,
        Text,
        PixelRatio
    } from 'react-native'
    
    //創建自定義組件header
    export default class header extends Component {
        render() {
        return(
            <View style={style.flex}>
            <Text style={style.font}>
                <Text style={style.font1}>網易</Text>
                <Text style={style.font2}>新聞</Text>
                <Text>有態度</Text>
            </Text>
            </View>
        );
        }
    }
    
    //創建樣式表
    style = StyleSheet.create({
        flex: {
        marginTop: 25,
        height: 50,
        borderBottomWidth: 3/ PixelRatio.get(),
        borderBottomColor: '#EF2D36',
        alignItems: 'center'
        },
        font: {
        fontSize: 25,
        fontWeight: 'bold',
        textAlign: 'center'
        },
        font1: {
        color: '#CD1D1C'
        },
        font2: {
        color: '#fff',
        backgroundColor: '#CD1D1c'
        }
    });

    這個樣式表中有三個font樣式,font中的可以被內部繼承,font1中添加顏色,其他的樣式從font中繼承,font2同理。flex中除了設置頭部高度外,還添加了底部分隔線。

    創建好自定義組件后,就是使用了,首先打開index.ios.js,引入header組件:

    import Header from './header';

    使用自定義組件:

    class neteast extends Component {
        render() {
        return(
            <Header></Header>
        );
        }
    }

    2.列表組件

    這部分將自定義一個List組件,但實際上,它是列表的item。這樣,我們每增加一個item,直接復用List組件即可。這里,我們將List組件單獨放到list.js文件中。

    //引入需要的組件
    import React, {Component} from 'react';
    import {
        AppRegistry,
        StyleSheet,
        Text,
        View
    } from 'react-native';
    
    //創建自定義組件list
    export default class list extends Component {
        render() {
        return (
            <View style={styles.list_item}>
            <Text style={styles.list_item_font}>{this.props.title}</Text>
            </View>
        );
        }
    }
    
    //創建樣式表
    styles = StyleSheet.create({
        flex: {
        flex: 1
        },
        list_item: {
        height: 40,
        marginLeft: 10,
        marginRight: 10,
        borderBottomWidth: 1,
        borderBottomColor: '#ddd',
        justifyContent: 'center'
        },
        lsit_item_font: {
        fontSize: 16
        }
    });

    使用起來也比較簡單:

    <List title='宇航員在太空宣布“三體”獲獎'></List>
    <List title='明天端午節啦'></List>
    <List title='再次學習React Native'></List>

    3.完成“要聞”

    其實“要聞”部分也是一個列表,這個組件相對來說,增加以下兩個功能:1.超過兩行,以省略號結尾;2.點擊條目,彈出Dialog顯示。

    通過onPress添加點擊事件,使用numberOfLines來設置最大行數,這里需要注意的是,在for循環使用了iterator,這就需要在循環內添加key屬性,否則,模擬器會有黃色警告。

    相比header和list來說,importantNews組件使用了循環,并且添加了新的函數show(),當用戶點擊條目時,會彈出對話框顯示內容。

    import React, {Component} from 'react';
    import {
        AppRegistry,
        StyleSheet,
        Text,
        View
    } from 'react-native';
    
    export default class importantNews extends Component {
        show(title) {
        alert(title);
        }
        render() {
        var news = [];
        for(var item of this.props.news) {
            var text = (
            <Text key={item} onPress={this.show.bind(this, item)}
            numberOfLines={2}
            style={styles3.news_item}>
            {item}
            </Text>
            );
            news.push(text);
        }
        return(
            <View style={styles3.flex1}>
            <Text style={styles3.news_title}>今日要聞</Text>
            {news}
            </View>
        );
        }
    }
    
    styles3 = StyleSheet.create({
        flex1: {
        flex: 1
        },
        news_title: {
        fontSize: 20,
        fontWeight: 'bold',
        color: '#cd1d1c',
        marginLeft: 10,
        marginTop: 15
        },
        news_item: {
        marginLeft: 10,
        marginRight: 10,
        fontSize: 15,
        lineHeight: 30
        },
    });

    使用起來,也更“像”一個列表了:

    <ImportantNews news={[
            '1、劉慈欣《三體》獲“雨果獎”為中國作家首次',
            '2、劉慈欣《三體》獲“雨果獎”為中國作家首次',
            '3、劉慈欣《三體》獲“雨果獎”為中國作家首次',
            '4、劉慈欣《三體》獲“雨果獎”為中國作家首次 劉慈欣《三體》獲“雨果獎”為中國作家首次 劉慈欣《三體》獲“雨果獎”為中國作家首次'
        ]}>
    </ImportantNews>    

    最后,別忘了將neteast注冊,使用哦?

    AppRegistry.registerComponent('demo01', () => neteast);
    版權聲明:本文為dapan728原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/dapan728/article/details/72823858

    智能推薦

    React Native學習記錄

    一、新建項目 1、安裝react環境 2、初始化項目 3、連接安卓機: 4、啟動項目 二、獲取地理位置 1、添加權限 iOS 你需要在Info.plist中增加NSLocationWhenInUseUsageDescription字段來啟用定位功能。如果你使用react-native init創建項目,定位會被默認啟用。 Android 要請求訪問地理位置的權限,你需要在AndroidManife...

    react native 做用戶列表

    需求: 從API上請求下來的用戶數據,做成一個類似通訊錄的模式 請求下來的數據格式: 整理后數據格式 現在數據格式很符合需求了,那么就開始套數據 我們使用SectionList來做這件事 這里是右側字母的列表 在獲取到API數據并且轉換之后要對每一條數據的高度進行計算,為點擊字母頁面滾動到對應位置滾動做準備 將計算出來的數據傳給getItemLayout使用(上面把數據全都放在了this.layo...

    react native

    一、移動APP 開發技術選型進化 第一階段   Native 1.性能優秀 2.開發效率低下,不可跨端 第二階段    Native H5/Hybrid 1.Hybrid多端運行,解決了開發效率問題 2.性能存在瓶頸 現階段  Native H5/Hybrid React Native 二、開發進階-頁面性能 頁面(Page)切換卡頓問題 頁面切換...

    React Native

    中文網站:https://reactnative.cn/docs/getting-started 安裝環境 在Mac平臺上開發React Native需要安裝以下環境和工具: Note.js React Native Command Line Tools XCode/AndroidStudio 1、安裝Node.js React Native開發需要用到Node.js環境。我們做React Nat...

    React Native學習(2)Props(屬性)

    Props(屬性) 大多數組件在創建時就可以使用各種參數來進行定制。用于定制的這些參數就稱為 props(屬性)。 創建一個圖片 mypic,傳入了一個source的prop來指定其圖片地址,又用一個style的prop來控制圖片的大小 注意如果圖片未顯示,請允許iOS應用程序http 請求...

    猜你喜歡

    React-Native學習筆記(一)

    現在React-Native框架很是流行,基本到哪里都會被問到是否有了解過這個框架,今天就來學習一下這個很火的框架。 首先介紹一下所用的開發環境:win10 64位專業版,Android Studio2.3.3,gradle3.3。 由于原來已經安裝Android Studio開發環境,所以這里只需要安裝React-Native的組件就可以了。 安裝node.js,到這里下載安裝文件,之后點擊安裝...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡