赵走x博客
网站访问量:151949
首页
书籍
软件
工具
古诗词
搜索
登录
49、Flux:理念、回顾Whinepad
48、lint、Flow、测试与复验:测试
47、lint、Flow、测试与复验:Flow
46、lint、Flow、测试与复验:ESLint
45、lint、Flow、测试与复验:package.json
44、构建实例应用:<Whinepad>
43、构建实例应用:应用配置
43、构建实例应用:<Excel>:改进的新版本
42、构建实例应用:组件:对话框
41、构建实例应用:组件:Actions
39、构建实例应用:表单:Form
38、构建实例应用:表单:<FormInput>“工厂组件”
37、构建实例应用:表单:Rating组件
36、构建实例应用:表单:Suggest
35、构建实例应用:Button组件
34、构建实例应用:组件
33、构建实例应用:Whinepad v.0.0.1
32、发布
31、开始构建
30、安装必备工具
29、为应用开发做准备:一个模板应用
28、JSX 和表单
27、JSX 和HTML 的区别
26、在JSX 中返回多个节点
25、展开属性
24、HTML 实体
23、JSX入门
22、Excel:一个出色的表格组件:下载表格数据
21、Excel:一个出色的表格组件:即时回放
20、Excel:一个出色的表格组件:搜索
19、Excel:一个出色的表格组件:编辑数据
18、Excel:一个出色的表格组件:排序
17、Excel:一个出色的表格组件
16、 PureRenderMixin
15、 性能优化:避免组件更新
14、 生命周期示例:使用子组件
13、组件生命周期示例:使用mixin
12、组件:生命周期方法
11、中途改变属性
10、从外部访问组件
9、在初始化state 时使用props:一种反模式
8、 props 与state
7、关于DOM 事件的说明
6、组件:带状态的文本框组件
5、组件的state
4、组件的propTypes
3、组件的属性
2、组件的基础
1、Hello World
50、Flux:Store
4、组件的propTypes
资源编号:76052
书籍
React快速上手开发
热度:83
在你的组件中,可以添加一个名为propTypes 的属性,以声明组件需要接收的属性列表及其对应类型。
在你的组件中,可以添加一个名为propTypes 的属性,以声明组件需要接收的属性列表及其对应类型。 下面是一个例子: ``` var Component=React.createClass({ propTypes:{ name:Reacr.PropTypes.string.isRequired, }, render:function () { return React.DOM.span(null,'My name is '+this.props.name) } }); ``` 虽然也可以不使用propTypes,但是使用propTypes 有以下两方面的好处。 * 通过预先声明组件期望接收的参数,让使用组件的用户不需要在render() 方法的源代码中到处寻找该组件可配置的属性(这可能需要花费很长时间)。 * React 会在运行时验证属性值的有效性。这使得你可以放心编写render() 函数,而不需要对组件接收的数据类型有所顾虑(甚至过分怀疑)。 让我们看看其验证效果。name: React.PropTypes.string.isRequired 清晰地指明了name 属性是一个必须提供的字符串值。假设你忘记传递这个值,会在控制台中得到一个警告信息(如图2-3 所示): ``` ReactDOM.render( React.createElement(Component,{}), document.getElementById("app") ); ```  图2-3:没有提供必需的属性值时出现的警告信息 如果你提供了一个无效类型的值,当然也会得到警告信息。比如提供的值是整数类型(如图2-4 所示): ``` ReactDOM.render( React.createElement(Component,{name:123}), document.getElementById("app") ); ```  图2-4:提供了无效类型的属性值时出现的警告信息 图2-5 列出了PropTypes 的可用属性列表,用于根据具体需求进行选用。  图2-5:所有的React.PropTypes 可用属性 在组件中声明propTypes 是可选的,这也意味着你可以在这里选择列出部分而非所有属性。或许你会觉得不声明所有属性是一个坏主意,但要牢记一点,这种情况在调试他人代码时是有可能遇到的。 ### 默认属性值 当你的组件接收可选参数时,你需要特别小心没有提供这些属性的情况,以确保组件在这些情况下正常运行。这难免会导致一些防御性的样板代码产生,比如: ``` var text = 'text' in this.props ? this.props.text : ''; ``` 可以通过实现getDefaultProps() 方法,避免这种代码的产生(并把关注点放在更重要的地方): ``` var Component=React.createClass({ propTypes:{ name:React.PropTypes.string.isRequired, }, getDefaultProps:function(){ return{ name:'mark' } }, render:function () { return React.DOM.span(null,'My name is '+this.props.name) } }); ReactDOM.render( React.createElement(Component,{}), document.getElementById("app") ); ``` 运行结果: 