React Native(iOS)新手小白零基础自学(二)Text组件

这一节学习Text组件,话不多说,用实际小模块来实践一下。如下图所示:

屏幕快照 2016-04-29 下午1.12.29.png

偷个懒~~~(>_<)~~~

屏幕快照 2016-04-26 下午7.22.53.png

1.封装头部组件 :先新建一个文件 header.js

var React = require('react-native');

var {
  AppRegistry,
  StyleSheet,
  View,
  Text,
  PixelRatio
} = React;
/*
  首先对于有三个Text,分别表示“网易”、“新闻”、“有态度”

  这里我们在外层嵌套了一个Text,这样Text就不会按照flexbox布局 ,这样我们给了一个全局的样式font。
  然后再分别对'新闻'、'有态度'分别设置fontOne、fontTwo
 */
var Header = React.createClass({
  render: function(){
    return (
      <View style={styles.flex}>
        <Text style={styles.font}>
          <Text style={styles.fontOne}>網易</Text>
          <Text style={styles.fontTwo}>新闻</Text>
          <Text>有态度°</Text>
        </Text>
      </View>
    );
  }
});

/*
  flex
  alignItems:'center'  使Text组件水平居中
  其他参数不用解释

  font
  textAlign:'center'  使文字在Text组件中居中

*/

var styles = StyleSheet.create ({
  flex: {
    marginTop:25,
    height:50,
    borderBottomWidth:3/PixelRatio.get(),
    borderColor:'#EF2D36',
    alignItems:'center'
  },
  font: {
    fontSize:25,
    fontWeight:'bold',
    textAlign:'center'
  },
  fontOne: {
    color:'#CD1D1C'
  },
  fontTwo: {
    color:'#fff',
    backgroundColor:'#CD1D1C'
  }
});
/*
  exports 成独立组件
*/
module.exports = Header;

然后我们可以测试一下封装后的效果,在index.ios.js文件中写如下代码:

var React = require('react-native');
var Header = require('./header'); //加载Header组件

var {
  AppRegistry,
  StyleSheet,
  View,
  Text
} = React;

var app = React.createClass ({
  render: function(){
    return (
      <View style={styles.flex}>
        <Header></Header>
      </View>
    );
  }
});

var styles = StyleSheet.create ({
  flex: {
    flex:1
  },
});

AppRegistry.registerComponent('InformationServicesRN' , () => app);

实现效果如下:

屏幕快照 2016-04-26 下午9.48.04.png

2.列表组件
列表看起来和iOS的tableview差不多,React Native有封装好的,也可以直接调用原生的,这里为了练习Text我们就自己做简单的封装。每一条新闻可以独立成一个简单的组件,同时还希望提供一个title,而不是写死在组件中(有点自定义cell,再提供一个外部title 的意思)。这里直接在index.ios.js里面写

/*
  封装List组件(类似于函数)
 */
var List = React.createClass ({
  render: function(){
    return (
      <View style={styles.listItem}>
        <Text style={styles.listItemFont}>{this.props.title}</Text>
      </View>
    );
  }
});

然后在程序入口app中使用刚才封装好的List组件

var app = React.createClass ({
  render: function(){
    return (
      <View style={styles.flex}>
        <Header></Header>
        <List title='宇航员在太空宣布"三体"获奖'></List>
        <List title='NASA发短片纪念火星征程50年'></List>
        <List title='男生连续做一周苦瓜吃吐女友'></List>
        <List title='女童遭鲨鱼袭击又下海救伙伴'></List>
      </View>
    );
  }
});

样式为:

var styles = StyleSheet.create ({
  flex: {
    flex:1
  },
  listItem: {
    height:40,
    marginLeft:10,
    marginRight:10,
    borderBottomWidth:1,
    borderBottomColor:'#ddd',
    justifyContent:'center'
  },
  listItemFont: {
    fontSize:16
  }
});

展示效果如下:

屏幕快照 2016-04-29 下午12.40.09.png

3.完成“今日要闻”
要完成三个功能:标题展示、当标题超过两行时,用(...)表示、点击标题弹出标题内容。和List一样,我们也做一个封装以便调用:

/*
  封装ImportantNews组件
      用this.props属性接收外部传入的参数
      增加onPress事件,当新闻被按下时通过bind调用show方法,弹出标题
      bind方法中: this表示上下文对象,类似于OC中的self
                this.props.news[i]  传递参数
      numberOfLines = {2}  表示显示2行,和OC中的差不多
      {this.props.news[i]}  获取传递数据
 */
var ImportantNews = React.createClass ({
  show: function(title) {
    alert(title);
  },
  render: function() {
    var news = [];
    for (var i in this.props.news) {
      var text = (
        <Text
          onPress = {this.show.bind(this, this.props.news[i])}
          numberOfLines = {2}
          style = {styles.newsItem}>
          {this.props.news[i]}
        </Text>
      );
      news.push(text);
    }
    return (
      <View style={styles.flex}>
        <Text style={styles.newsTitle}>今日要闻</Text>
        {news}
      </View>
    );
  }
});

然后在app中调用

<ImportantNews news = {[
          '1、刘慈欣《三体》获雨果奖,为中国作家首次,为中国作家首次',
          '2、京津冀协同发展定位明确:北京无经济中心表述',
          '3、好奇宝宝第一次淋雨,好奇宝宝第一次淋雨好奇宝宝第一次淋雨好奇宝宝第一次淋雨好奇宝宝第一次淋雨好奇宝宝第一次淋雨好奇宝宝第一次淋雨好奇宝宝第一次淋雨',
          '4、人名邮电出版社即将出版《React Native入门与实战》,读者可以用JavaScript开发应用']}>
        </ImportantNews>

样式为:

  newsTitle: {
    fontSize:20,
    fontWeight:'bold',
    color:'#CD1D1C',
    marginLeft:10,
    marginTop:15
  },
  newsItem: {
    marginLeft:10,
    marginRight:10,
    fontSize:15,
    lineHeight:20
  }

看看效果吧~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 大家看到这个题目可能会认为我要写一篇抒情的散文,其实不然。今天来谈谈我对旅游及销售的新的感受。 不知道...
    盛夏清菡阅读 163评论 0 1
  • 佛罗伦萨的母亲河 (佛罗伦萨的图书馆) (佛罗伦萨古城的街)
    风筝2017阅读 154评论 0 0
  • 在经历了漫长的雨季之后又转换到隆冬,心始终被一个冷字层层包裹,密不透风,即便冬日里偶尔阳光灿烂,亦照射不到心房。 ...
    静华2016阅读 1,990评论 58 36
  • 一个人总要到了一定年龄,才能恍然醒悟许多东西,才能比较清楚明白活着的意义。 人生就像一首诗,当我们年轻的时候,往往...
    賓天下阅读 497评论 0 2
  • 每个人都值得被理解,也需要被理解。只有愿意更深地去理解对方,才能产生包容、谅解以及关爱。 所以理解是关系和沟通的基...
    一位先生陈阅读 158评论 0 5