第七篇动手写组件

  1. React-Native的核心思想就是组件化,相当于MVCview,因此开发应用的最佳方式就是将功能组件化。

一、最简单的方式

  1. 这里我们实现一个最简单的组件,就是邮件的末尾署名的组件。组件意味着复用,意味着统一。现在有这样一个需求,我们需要根据不同用户发送邮件时,生成每个用户的名片(即邮件末尾的署名)。
  2. 1、一般一开始的实现方式如下,直接将组件内容写到功能需求的地方:
  3. <View>
  4. <View>..........这里是当前邮件组的其它功能</View>
  5. <View>
  6. <Text>框架研发部</Text>
  7. <Text>www.ctrip.com</Text>
  8. </View>
  9. </View>
  10. 2、有一天,其它的部门的同事提出他们也需要在其他的地方,增加他们的邮件署名,那么你是否又会复制一份代码呢,当然不是,我们可以组件化:
  11. var Email = React.createClass({
  12. render: function(){
  13. return (
  14. <View style={styles.container}>
  15. <Text style={styles.text}>{this.props.name}</Text>
  16. <Text style={styles.text}>{this.props.url}</Text>
  17. </View>
  18. );
  19. }
  20. });
  21. 3、整体的代码如下:

lesson8: 自己动手写组件 - 图1

二、循环一个文章列表

  1. 要实现的效果如下图:

lesson8: 自己动手写组件 - 图2

  1. 第一步改造我们的组件
  2. var Article = React.createClass({
  3. render: function(){
  4. return (
  5. <View style={styles.container}>
  6. <Text style={[styles.text, styles.title]}>{this.props.title}</Text>
  7. <Text style={styles.text}>{this.props.author}</Text>
  8. <Text style={styles.text}>{this.props.time}</Text>
  9. </View>
  10. );
  11. }
  12. });
  13. 第二步定义数据model和循环
  14. var App = React.createClass({
  15. getInitialState: function(){
  16. var data = [
  17. {
  18. title: "React-Native入门指南",
  19. author: "vczero",
  20. time: "2015-06-28"
  21. },
  22. {
  23. title: "为什么世界不一样",
  24. author: "vczero",
  25. time: "2015-06-8"
  26. },
  27. {
  28. title: "你来,我就告诉你",
  29. author: "vczero",
  30. time: "2015-04-01"
  31. }
  32. ];
  33. return {
  34. articles: data
  35. };
  36. },
  37. render: function(){
  38. return(
  39. <ScrollView>
  40. {this.state.articles.map(function(article){
  41. return <Article title={article.title} author={article.author} time={article.time}/>
  42. })}
  43. </ScrollView>
  44. );
  45. }
  46. });
  47. 整个代码如下:

lesson8: 自己动手写组件 - 图3