1》》》基础的props使用     不可修改父属性    getDefaultProps   对于外界/父组件的属性值,无法直接修改,它是只读的。

<script type="text/babel">
var Hello = React.createClass({
getDefaultProps:function(){
return{
name:'Default'
}
},
render:function(){
return (
<span>Hello {this.props.name} !</span>
);
}
});
ReactDOM.render(
<Hello />,
document.getElementById('example')
)
</script>

2》》》父子传递

<script type="text/babel">
//两层以上的传递
//1、props 属性值提倡显示的传递到下一级
//子组件
var Child = React.createClass({
render:function(){
return(
<span>Hello {this.props.fullName}</span>
);
}
}); var Parent = React.createClass({
addFamilyName:function(name){
return (name + 'chen');
},
render:function(){
return(
<div>
<Child fullName={this.addFamilyName(this.props.name)} name={this.props.name}/>
</div>
);
}
}); ReactDOM.render(
<Parent name="jin" />,document.getElementById('example')
)
</script>

》》》state和props的区别

1、state 本组件内的数据   相对封闭的单元/结构的数据  状态     组件的无状态

2、props 组件直接的数据流动  单向的 ,从owner向子组件

<script type="text/babel">
//props和state的区别
var Msg = React.createClass({
render:function(){
return(
<div>
<span style={{color:this.props.color}}>Hello {this.props.master}.IT is {this.props.time} now.the color is {this.props.color} </span>
</div> );
}
});
var Hello = React.createClass({
getInitialState:function(){
return{
time:new Date().toDateString(),
color:'red'
}
},
changeColor:function(){
this.setState({color:'green'})
},
render:function(){
return(
<div>
<span onClick={this.changeColor}>The ownerName is {this.props.name}</span>
<br/>
<Msg master={this.props.name} time={this.state.time} color={this.state.color} />
</div>
);
} }); ReactDOM.render(
<Hello name="world" />,
document.getElementById('example')
)
</script>

》》》propTypes

Prop 验证

1、React.PropTypes.string   2、React、PropTypes.bool   3、React.PropTypes.number  4、React.PropTypes.instanceOf(Message)  5、optionalUnion:React.PropTypes.oneOfType([])   6、React.PropTypes.arrayOf(React.PropTypes.number) 7、customProp:function(props,propName,componentName)

propTypesReact.PropTypes 提供很多验证器 (validator) 来验证传入数据的有效性。当向 props 传入无效数据时,JavaScript 控制台会抛出警告。注意为了性能考虑,只在开发环境验证 propTypes。下面用例子来说明不同验证器的区别:

React.createClass({
propTypes: {
// 可以声明 prop 为指定的 JS 基本类型。默认
// 情况下,这些 prop 都是可传可不传的。
optionalArray: React.PropTypes.array,
optionalBool: React.PropTypes.bool,
optionalFunc: React.PropTypes.func,
optionalNumber: React.PropTypes.number,
optionalObject: React.PropTypes.object,
optionalString: React.PropTypes.string, // 所有可以被渲染的对象:数字,
// 字符串,DOM 元素或包含这些类型的数组。
optionalNode: React.PropTypes.node, // React 元素
optionalElement: React.PropTypes.element, // 用 JS 的 instanceof 操作符声明 prop 为类的实例。
optionalMessage: React.PropTypes.instanceOf(Message), // 用 enum 来限制 prop 只接受指定的值。
optionalEnum: React.PropTypes.oneOf(['News', 'Photos']), // 指定的多个对象类型中的一个
optionalUnion: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
React.PropTypes.instanceOf(Message)
]), // 指定类型组成的数组
optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number), // 指定类型的属性构成的对象
optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number), // 特定形状参数的对象
optionalObjectWithShape: React.PropTypes.shape({
color: React.PropTypes.string,
fontSize: React.PropTypes.number
}), // 以后任意类型加上 `isRequired` 来使 prop 不可空。
requiredFunc: React.PropTypes.func.isRequired, // 不可空的任意类型
requiredAny: React.PropTypes.any.isRequired, // 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接
// 使用 `console.warn` 或抛异常,因为这样 `oneOfType` 会失效。
customProp: function(props, propName, componentName) {
if (!/matchme/.test(props[propName])) {
return new Error('Validation failed!');
}
}
},
/* ... */
});

栗子:》》》》

<script type="text/babel">
//设定props的属性
var Hello = React.createClass({
propTypes:{
//name:React.PropTypes.string
//name:React.PropTypes.oneOf(['News','world'])
//type:React.PropTypes.oneOfType([
// React.PropTypes.string,
// React.PropTypes.number,
//]),
//type:React.PropTypes.arrayOf(React.PropTypes.number),
name:function(props,propName,componentName){
if(!/^W/.test(props[propName])){
return new Error(
'Invalid prop `' + propName + '`supplied to' + '`' + componentName + '`.Validtion failed.'
);
}
}
}, render:function(){
return (
<div>
<span>Hello {this.props.name}!</span>
</div>
);
}
}); ReactDOM.render(
<Hello name='world' />,
document.getElementById('example')
);
</script>

》》》this.props.children

<script type="text/babel">
//this.props.children var Note = React.createClass({
render:function(){
return(
<li>{this.props.text}</li>
);
}
}); var NotesList = React.createClass({
render:function(){
return(
<ol>
{
this.props.children.map(function(child,index){
return <Note key={index} text={child}/>
})
}
</ol>
);
}
}); ReactDOM.render(
<NotesList>
<span>hello</span>
<span>world</span>
</NotesList>,
document.getElementById('example')
)
</script>

>>>结构赋值利用es6   ...

<script type="text/babel">
var Child = React.createClass({
render:function(){
return(
<div>
<span>
I am {this.props.name}! I am {this.props.age} years old. It is {this.props.time} now
</span>
</div>
);
}
}); var Parent = React.createClass({
getInitialState:function(){
return{
time: new Date().toDateString()
}
}, render:function(){
var {...others} = this.props;
return(
<Child {...others} time={this.state.time} />
);
}
}); ReactDOM.render(
<Parent name="chen" age="" />,
document.getElementById('example')
);
</script>

reactjs入门到实战(五)---- props详解的更多相关文章

  1. SVN与TortoiseSVN实战:补丁详解

    硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...

  2. SVN与TortoiseSVN实战:补丁详解(转)

    硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...

  3. Farseer.net轻量级开源框架 入门篇:添加数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 ...

  4. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  5. 【转】Zabbix 3.0 从入门到精通(zabbix使用详解)

    [转]Zabbix 3.0 从入门到精通(zabbix使用详解) 第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/ ...

  6. Ubuntu14.04下Ambari安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)

    不多说,直接上干货! 写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentO ...

  7. Ubuntu14.04下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)(在线或离线)

    第一步: Cloudera Manager安装之Cloudera Manager安装前准备(Ubuntu14.04)(一) 第二步: Cloudera Manager安装之时间服务器和时间客户端(Ub ...

  8. Farseer.net轻量级开源框架 入门篇:修改数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 ...

  9. Farseer.net轻量级开源框架 入门篇:删除数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 查询数据详解 ...

  10. Farseer.net轻量级开源框架 入门篇:查询数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 下一篇:Farseer.net轻量级开源框架 中级篇: Where条 ...

随机推荐

  1. how to use automapper in c#, from cf~

    [DataContract] public class GroupDto { [DataMember] public int id { get; set; } [DataMember] public ...

  2. Java基础(9):Java生成随机数一定范围内的数的一个典型例子

    题目:编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组 note: 通过 (int)(Math.random() * 100) 生成 ...

  3. mac tomcat

    alampsdeMacBook-Pro:bin alamps$ ./startup.sh Using CATALINA_BASE: /Users/alamps/Library/apache-tomca ...

  4. php session session_set_save_handler 接管所有的session管理工作

    一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数 据库,这样可以通过SQL语句来删除所有过期的sessi ...

  5. paper 30 :libsvm的参数说明

    English: libsvm_options: -s svm_type : set type of SVM (default 0) 0 -- C-SVC 1 -- nu-SVC 2 -- one-c ...

  6. sql server 查看数据库编码格式

    user masterselect SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版.开发版等,SERVERPROPERTY(N'collation' ...

  7. 【sublime】插件安装:包管理器——Package Control

    首先,按CTRL+`,打开控制台   粘贴下面的代码,之后回车 如果是sublime3 import urllib.request,os,hashlib; h = '7183a2d3e96f11eea ...

  8. Debian自带浏览器IceWeasel的中文化

    Iceweasel浏览器简体中文组件 # Iceweasel是Debian中Mozilla Firefox浏览器的一个再发布版#英语很菜,所以浏览器菜单也要是中文的sudo apt-get insta ...

  9. Windows系统文件受损的修复技巧

    Windows2000/XP系统文件受损的修复技巧 意外重启.安装了不兼容的软件.恶意程序侵扰.误删文件……有太多种可能性会使我们的系统文件受损,而系统文件受损后最直接的表现就是系统不稳定.经常出现错 ...

  10. PHP人民币金额数字转中文大写的函数

    <?php header("Content-Type:text/html;charset=utf-8"); error_reporting(2); function cny( ...