RN|很RN的部分|基础组件篇

Posted by mieruko on 2017-03-23

前言

RN中有一些提前为我们写好的最基本的组件。它们是:

  • 视图组件 View
  • 文本组件 Text
  • 图像组件 Image
  • 列表视图组件 ListView

View

View组件是创建用户界面的一个最基本的组件,类似于我们html里面div标签。
我们可以给它添加一些样式,添加事件等等。
它当然必须是可以嵌套的:

1
2
3
<View>
<View></View>
</View>

当我们写出上述jsx代码的时候,它底层自动帮我们对应了ios的UIView组件,或者安卓的android.view组件。

Text

顾名思义是写文本用的,注意它的用法规则是必须要嵌套在一个View组件里面~~
同样可以嵌套:

1
2
3
4
5
6
<View>
<Text style={{fontWeight:"400"}}>
我是小丸子
<Text style={{fontWeight:"600"}}>你呢</Text>
</Text>
</View>

自定义一个文本组件

是的,有时候我们需要全局保持一个文本样式,但是又总不能个挨个给每一个组件增加一个同样的style,这时候我们可以自定义一个组件,然后在接下来的开发中都使用这一个组件:
比如:

1
2
3
4
5
6
7
class HeaderText extends React.Component {
render (
<Text style={{color:"#fff"}}>
{this.props.children}
</Text>
)
}

Image

图像组件
Image咋用??我们把图片链接放在source属性里:

1
2
3
4
5
6
<View>
<Image
style={这里写样式}
source={require("这里写地址")} />
</Image>
</View>

Image只能自关闭吗?
当然不啦!
因为RN中没有单独设置背景图像的属性,所以这时候我们要使用有开始有结束的标签了:

1
2
3
4
5
6
7
8
9
10
11
12
<View>
<Image
style={{styles.backgroundImage}}
source={require("这里写地址")}
>
<View>
<Text>
我是写在Image上的文字哦~~~
</Text/>
</View>
</Image>
</View>

ListView

ListView组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同。
因此,数据是关键。
ListView组件必须的两个属性是dataSource和renderRow。dataSource是列表的数据源,而renderRow则逐个解析数据源中的数据,然后返回一个设定好格式的组件来渲染。
dataSource这个属性需要我们预先初始化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class ListViewBasics extends Component {
constructor(props) {
super(props);
let movies = [{
{title:"你的名字"},
{title:"大鱼海棠"},
{title:"模仿游戏"}
}];

let dataSource = new ListView.DataSource({
// 必须手动写的一个方法,判断每行的数据是否更改了
rowHasChanged:(row1,row2) => row1!==row2
});
this.state = {
// 注入要处理的数据
movies: dataSource.cloneWithRows(movies);
};
}

render() {
return {
<View>
<ListView
data={this.state.movies}
// 用renderRow属性迭代movies的每一个子元素进行渲染
renderRow={
movie => <Text>{movie.title}</Text>
}
/>
</View>
}
}
}

总结

既然有最基础的组件,那么就有其它的组件哈哈哈哈~~
下一篇会写一写其它的组件啦~~~