React学习笔记(三) 组件传值
组件嵌套后,父组件怎么向子组件发送数据呢?
答案是: this.props
<script type="text/babel">
var MyFirst = React.createClass({
getInitialState : function(){
return {
myMessage: ['我是父组件data1','我是父组件data2','我是父组件data3',]
}
},
render : function(){
return (
<div>
<h3>父组件</h3>
<MySecond name={this.state.myMessage} />
</div>
)
}
});
var MySecond = React.createClass({
render : function(){
var msg = [];
var message = this.props.name;
message.forEach(function(value,key){
msg.push(
<p key={key}>我的消息{key}:{value}</p>
)
})
return (
<div>
{msg}
</div>
)
}
})
var haFirst = ReactDOM.render(
<MyFirst />,
document.getElementById("test"),
function(){
console.log('编译完成!');
}
)
</script>
有的时候父组件传过来的数据类型跟子组件需要的类型不一样,那该怎么办呢?
PropTypes属性,就是用来验证组件实例的属性是否符合要求
var MyTitle = React.createClass({
propTypes: {
title: React.PropTypes.string.isRequired,
},
render: function() {
return <h1> {this.props.title} </h1>;
}
});
PropTypes的类型有很多:
React.PropTypes.array React.PropTypes.bool React.PropTypes.func React.PropTypes.number React.PropTypes.object React.PropTypes.string React.PropTypes.node React.PropTypes.element
若属性不符合要求此外,我们可以用getDefaultProps 方法可以用来设置组件属性的默认值
<script type="text/babel">
var MyFirst = React.createClass({
getInitialState : function(){
return {
myMessage: ['我是父组件data1','我是父组件data2','我是父组件data3',]
}
},
render : function(){
return (
<div>
<h3>父组件</h3>
<MySecond />
</div>
)
}
});
var MySecond = React.createClass({
getDefaultProps : function(){ //设置默认值
return {
name : [,,]
}
},
PropTypes : { //定义变量的类型:数组且必须
name : React.PropTypes.array.isRequired
},
render : function(){
var msg = [];
var message = this.props.name;
message.forEach(function(value,key){
msg.push(
<p key={key}>我的消息{key}:{value}</p>
)
})
return (
<div>
{msg}
</div>
)
}
})
var haFirst = ReactDOM.render(
<MyFirst />,
document.getElementById("test"),
function(){
console.log('编译完成!');
}
)
</script>
如上:父组件如果没有给子组件传值,或者传值的类型不对,子组件将自动调用默认值1,2,3
PS:当你在写react的时候报了类似于这样子的错:Each child in an array or iterator should have a unique “key” prop.
解决办法只要在循环的每个子项添加一个key就行了,代码如下:
var names = ['Alice', 'Emily', 'Kate'];
ReactDOM.render(
<div>
{
names.map(function (name, key) {
return <div key={key}>Hello, {name}!</div>
})
}
</div>,
document.getElementById('example')
);
React学习笔记(三) 组件传值的更多相关文章
- angular学习笔记 父子组件传值
一.如何将父组件的值传到子组件? 在子组件里面引入Input,然后用@Input 变量1 接收 接着在父组件中的,子组件标签上添加[msg]="msg",中括号里的名字要与子组件中 ...
- 【React】react学习笔记03-React组件对象的三大属性-state
今天晚上学习了React中state的使用,特做此记录,对于学习的方式,博主仍然推荐直接复制完整代码,对着注释观察现象!: 上文中,我列举了两种React自定义组件的声明,这里我拿方式二进行举例: / ...
- React学习笔记(二) 组件状态
组件的状态(this.state): 组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI getIni ...
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- 【React】react学习笔记02-面向组件编程
react学习笔记02-面向组件编程 面向组件编程,直白来说,就是定义组件,使用组件. 以下内容则简单介绍下组建的声明与使用,直接复制demo观测结果即可. 步骤: 1.定义组件 a.轻量组件-函 ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
- React学习笔记 - Hello World
React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...
随机推荐
- KEIL、uVision、RealView、MDK、KEIL C51区别比较
KEIL uVision,KEIL MDK,KEIL For ARM,RealView MDK,KEIL C51,KEIL C166,KEIL C251 从接触MCS-51单片机开始,我们就知道有一个 ...
- What is happening in Crockford's object creation technique?
What is happening in Crockford's object creation technique? http://stackoverflow.com/questions/27660 ...
- 5个数求最值—南阳acm
问题描述 设计一个从5个整数中取最小数和最大数的程序 输入 输入只有一组测试数据,为五个不大于1万的正整数 输出 输出两个数,第一个为这五个数中的最小值,第二个为这五个数中 ...
- JDk 内部分工具 简述
jar — 一个创建和管理 jar 文件的工具. java — Java 应用启动器.在这篇文章里,开发和部署都是用的这个启动器. javac — Java 编译器. javadoc — API 文档 ...
- MongoDB 复制集 (三) 内部数据同步
一 数据同步 一个健康的secondary在运行时,会选择一个离自己最近的,数据比自己新的节点进行数据同步.选定节点后,它会从这个节点拉取oplog同步日志,具体流程是这样的: ...
- 開始折腾cocos2d-x,使用批处理来创建项目
開始抽出时间学习cocos2d-x了.尽管C和C++还都不咋地.只是在开发中学习记忆也许会更深吧. so决定从今天開始正式学习的用自己的空暇时间折腾它了.正好这个五一没什么事.昨天搭建了一下开发环境. ...
- c#调用api(FindFirstFile,FindNextFile)高效遍历目录文件【转载】
在c#下遍历目录,应用最多的应该就是 System.IO.DirectoryInfo.GetDirectories或GetFiles了,但是当目录特别大,文件特别多时,效率不尽人意,此时我们很容易想到 ...
- Test Bench基础知识笔记
学的内容多了,好多指令和用法都容易遗忘和混淆,出现这种情况就需要勤记笔记,忘记了多翻阅几次,基本上就能完全记住了. [`timescale 1ns/1ps]前一个1ns表示时延时间,后一个1ps表示时 ...
- Oracle约束操作
约束的概念: 约束是在表中定义的用于维护数据库完整性的一些规则.通过为表中的字段定义约 束,可以防止将错误的数据插入到表中. 注意: 1.如果某个约束只作用于单独的字段,既可以在字段级定义约束,也可以 ...
- [D3] 3. Scaling Basics
d3.scale.linear() <!DOCTYPE html> <html> <head lang="en"> <meta chars ...