React Native学习笔记(2)--新闻列表实现
2017-05-31 20:59
85 查看
本篇是在学习《React Native入门与实战》这本书时做的笔记,代码基于React Native 0.44实现的,算是对该书中代码的小小更新。
Text组件是一个用来展示文本的组件。我们可以给它设置按下动作(onPress),设置它的行数(numberOfLines)。
书中的新闻列表包括三部分,头部、列表项和要闻。效果如下图:
与上篇九宫格不同的是,我们将这三部分分别封装起来,即:Header,List,ImportantNews,这样,我们只需要在index.ios.js中引入这些组件即可,这样即达到了封装的效果,也可以重复使用这些自定义组件。
这个样式表中有三个font样式,font中的可以被内部继承,font1中添加颜色,其他的样式从font中继承,font2同理。flex中除了设置头部高度外,还添加了底部分隔线。
创建好自定义组件后,就是使用了,首先打开index.ios.js,引入header组件:
使用自定义组件:
使用起来也比较简单:
通过onPress添加点击事件,使用numberOfLines来设置最大行数,这里需要注意的是,在for循环使用了iterator,这就需要在循环内添加key属性,否则,模拟器会有黄色警告。
相比header和list来说,importantNews组件使用了循环,并且添加了新的函数show(),当用户点击条目时,会弹出对话框显示内容。
使用起来,也更“像”一个列表了:
最后,别忘了将neteast注册,使用哦〜
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);
相关文章推荐
- Javascript+ASP技术实现无刷新新闻列表
- Android之类似网易新闻客户端首页新闻列表实现思路
- 实现一个新闻列表的功能,并且具有分页的功能
- 从网络获取json后实现新闻列表界面
- Fragment实例精讲——新闻(购物)类App列表Fragment的简单实现
- [视频讲解]GridView里做链接实现新闻列表到详细内容页的跳转
- iOS 类似扣扣微信中腾讯新闻的新闻列表实现
- Android基础入门教程——5.2.5 Fragment实例精讲——新闻(购物)类App列表Fragment的简单实现
- ASP.NET菜鸟之路之实现新闻列表增删改
- swift 新闻列表实现
- jsp自定义标签实现新闻列表(与spring整合)
- 刚写完实现更新全部新闻列表的意大利式代码(最后连我都不认得了)
- JQuery页面图片切换和新闻列表滚动效果的具体实现
- ExpandListview应用(实现二级列表和实现新闻分类)
- 输入框实现新闻列表分页显示(一)
- dl,dt,dd实现新闻列表的一个实例
- JQuery实现页面企业广告图片切换和新闻列表滚动效果
- jQuery实现列表自动滚动循环滚动展示新闻
- 基于JS实现新闻列表无缝向上滚动实例代码
- 简单三层加存储过程实现新闻列表分页