React Native填坑之旅--Stateless组件
Stateless component也叫无状态组件。有三种方法可以创建无状态组件。
坑
一般一个组件是怎么定义的:
很久以前的方法:
const Heading = createClass({
render() {
return <Text>{this.props.title}</Text>
}
})
后来有了ES6
class Heading extends Component {
render() {
return <Text>{this.props.title}</Text>
}
}
接ES6的光,看起来好了很多。
填坑
但是,一个组件不需要状态的时候还给出那么多的定义还是不够精炼,太麻烦。于是用stateless component来填这个坑。
// Stateless functions
const Heading = ({title}) => <Text>{title}</Text>
看起来是多么的简洁、有力!
来个完整的例子:
const HiTitle = ({title}) => (
<Text style={styles.title}>
{title}
</Text>
)
const App = () => (
<View style={styles.container}>
<HiTitle title='A stateless component' />
</View>
)
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF'
},
title: {
fontSize: 36,
fontWeight: 'bold',
color: 'red'
}
})
AppRegistry.registerComponent('AwesomeProject', () => App);
运行起来是这样的:

显然stateless component更加的有表达力。但是在一个APP里也不可能所有的组件都是无状态的。所以最好是让一些容器(container)来包裹各种组件,而这些组件就可以写成是无状态的。用过Redux的都知道这么搞很有前途。
无状态组件没有生命周期的方法和显示的状态,这样加大的减少了代码量。但是无状态组件还是可以接收props的。比如,上例中的const HiTitle = ({title}) => (...)里的{ title }就是用来解析赋值props的。
既然可以接收props,那么也就可以设置propTypes和defaultProps。如:
const HiTitle = ({title}) => (
<Text style={styles.title}>
{title}
</Text>
)
HiTitle.propTypes = {React.PropTypes.string.isRequired}
HiTitle.defaultProps = {title: 'stateless component'}
React Native填坑之旅--Stateless组件的更多相关文章
- React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
- React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
- React Native填坑之旅--Flow篇(番外)
flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...
- React Native填坑之旅--组件生命周期
这次我们来填React Native生命周期的坑.这一点非常重要,需要有一个清晰的认识.如果你了解Android或者iOS的话,你会非常熟悉我们今天要说的的内容. 基本上一个React Native的 ...
- React Native填坑之旅--重新认识RN
如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...
- React Native填坑之旅--Navigation篇
React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...
- React Native填坑之旅--ListView篇
列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...
- React Native填坑之旅--动画
动画是提高用户体验不可缺少的一个元素.恰如其分的动画可以让用户更明确的感知当前的操作是什么. 无疑在使用React Native开发应用的时候也需要动画.这就需要知道RN都给我们提供了那些动画,和每个 ...
- React Native填坑之旅--Button篇
从React过来,发现React Native(以下简称RN)居然没有Button.隔壁的iOS是有UIButton的,隔壁的隔壁的Android里也是有的.没有Button,就没有点击效果啊.这还真 ...
随机推荐
- Sharif University CTF 2016 - Smooth As Silk
Category: Crypto Points: 200 Solves: 11 Description: p > q n = p*q = 1146153281852525177586999436 ...
- Oracle 更新表(另一张表)
Update a set(a.province,a.city)= (select province,city from b where b.mobile=a.mobile)
- CC1310的RSSI值问题
前几日,做CC1310的通信距离测试,发现我的CC1310的板子在433MHz,50kbps下通信距离非常近,RSSI值下探至-80左右就无法正常通信,与TI宣称的-120dbm接收灵敏度差距较大.使 ...
- Emmet (Zen Coding) HTML基本语法
1. 嵌套操作---------- 子操作: > div>ul>li 并列:+ div+ul>li 上级:^ ul>li^div ul>li>a^ ...
- mysql - join two derived tables
select t1.uid from (select uid from table1) t1 inner join (select uid from table2) t2 where t1.uid=t ...
- SQL中CONVERT日期不同格式的转换用法
SQL中CONVERT日期不同格式的转换用法 格式: CONVERT(data_type,expression[,style]) 说明:此样式一般在时间类型(datetime,smalldatetim ...
- Appium移动自动化测试之安装Appium
第一次学习appium,希望此安装教程可以帮助初学者,共同学习. Appium官网介绍:Appium是与本地,使用开源自动化测试框架, 混合和移动Web应用程序. 它驱动iOS和Android应用使用 ...
- LoadRunner参数更新方法和数据分配
参数化的定义:使用指定的数据源中的值来替换脚本录制生成的语句中的参数. 对Vuser脚本进行参数化的好处: 1.减小脚本的大小 2.提供了使用不同的脚本的值执行脚本的能力 参数化涉及两个任务: 1.用 ...
- 关于onmouseover和onmouseout的bug
总结了一下关于使用onmouseover以及onmouseout会出现的bug 首先简单的布局: <div id="box"> <div>这是一个内容< ...
- Java Reflection
Java语言的反射机制 1. Java反射的含义:获取应用中正在运行的Java对象. 2. Java反射机制: 在运行的程序中,对于任意的类,都可以知道这个类的属性.方法以及构造函数,对于任意对象都可 ...