• 复习 [array].map(function(item,index){})方法,传参里的函数需要有return值,一般用map()后都要用一个变量接一下,这个返回的还是一个数组,只是把每次遍历到的数组中的某一项调用函数进行处理里再放入新数组,就是那个变量的对应位置;这里用数组的for循环遍历其实很不方便,因为数组中每一项都是一个对象,所以用map()方法就非常方便
  • 使用迭代器,比如map()方法时,要给每个遍历到后返回的元素添加一个唯一的key值,否则,原来的版本会有警告,而现在的版本会直接报错react.js:18794 Warning: Each child in an array or iterator should have a unique "key" prop. Check the render method of CommentList. See https://fb.me/react-warning-keys for more information. 解决方法是给Comment标签一个key值,附上每个元素的index
  • 得到新的commentsNode其实是一个数组,数组中每个都是一个React的组件对象,所以这个数组可以直接插入到return函数里的div
  • 通过constructor()的方式来设置组件的初始化状态,通过给this.state直接赋值一个对象的方式,但是在这之前需要写super();老版本不写这句话没关系,但是在babel中,需要加上这句继承父级的属性后,才能写自己的属性
var oWrap = document.getElementById('wrap');

class Comment extends React.Component {
render(){
return (
<div>
<div className="comment-body">
{this.props.children}
</div>
<div className="comment-author">
-{this.props.author}
</div>
</div>
);
}
} class CommentForm extends React.Component {
render(){
return (
<div>
CommentForm
</div>
)
};
}
//var comments = [
// {author:'Victor',content:'This is my comment111!'},
// {author:'Mary',content:'This is my comment222!'},
// {author:'Qingyu',content:'This is my comment333!'}
//]; class CommentList extends React.Component {
render(){
var commentsNode = this.props.comments.map(function(item,index){
return <Comment key={'comment-'+index} author={item.author}>{item.content}</Comment>
}); //1). 复习 [array].map(function(item,index){})方法,
//2). 使用迭代器,比如map()方法时,要给每个遍历到后返回的元素添加一个唯一的key值,解决方法是给Comment标签一个key值,附上每个元素的index
//3). 得到新的commentsNode其实是一个数组,数组中每个都是一个React的组件对象,所以这个数组可以直接插入到return函数里的div中 return (
<div>
{commentsNode}
</div>
);
};
} class CommentBox extends React.Component { constructor(){ //通过constructor()的方式来设置组件的初始化状态,
super();//在babel中,需要加上这句继承父级的属性后,才能写自己的属性
this.state = {
comments:[] //初始化时comments为空数组,程序最后会调用一次setState来让它等于那个全局变量的comments数组,从而把它传递给子组件CommentList的comments属性中,一旦这个属性被赋予了一个数组,我们就可以用map来遍历,当然实际运用中我们会用ajax的方式获取数据后赋给这个数组
};
} render(){
return (
//让CommentList的comments属性根据组件对象的state中comments的变化而变化,而同时CommentsList组件在上面已经写了,props的comments的变动有会和CommentList里读取数据处理后渲染后输出commentsNode
<div>
<h1>Comment Box!!!</h1>
<CommentList comments={this.state.comments} />
<CommentForm />
</div>
);
}
} var box = ReactDOM.render(
<CommentBox />,
oWrap
);
//其实这时的box就是一个CommentBox组件对象,里面的state也是一个对象,我们可以通过setState来设置box,也就是CommentBox组件对象实例的状态,状态中的comments被赋值comments那个全局数组
box.setState({
comments:comments
})
console.log(box)

【学】React的学习之旅5-组件的嵌套的更多相关文章

  1. 【学】React的学习之旅6-组件的嵌套2

    <input type=text placeholder='aaa'>, placeholder属性是定义文本框在没有输入值之前显示的一段灰色提示 ()=>{}箭头函数在ECMA6里 ...

  2. 【学】React的学习之旅1

    React的学习之旅1 单标签要有斜杠代表结束 用React.createClass()方法时,赋值后的组件名称首字母一定要大写 一定要先定义组件,再用ReactDOM.render调用 组件里ren ...

  3. 【学】React的学习之旅7-官方例子总结

    如果在标签里有注释,除了使用/**/之外,如果写在子标签中,外面还需要用{}包起来,指明这段是javascript代码,否则这段注释会直接显示在页面上,例如 render:function (){ r ...

  4. 【学】React的学习之旅4-添加事件(onChange)

    实现联动绑定,在文本框中输入内容的同时,后面的span里内容跟着一起变化: onChange(),一旦触发一次变动,就执行某个函数: 既然已经在getInitialState属性里申明了一个变量inp ...

  5. 【学】React的学习之旅3 - 添加事件(onClick)

    button除了用<input type="button">之外,还可以直接用<button></button>来创建,而2个标签的中间的内容就 ...

  6. 【学】React的学习之旅2 - React Component的生命周期

    分成三个状态: Mounted Update Unmounted Mounted:当我们看到组件在浏览器中从无到有的效果的时候,mounted已经结束了,这个组件已经被mounted了 有这个阶段有2 ...

  7. 从零学React Native之09可触摸组件

    可触摸组件有: TouchableHighlight,TouchableNativeFeedback,TouchableOpacity,TouchableWithoutFeedback 1. Touc ...

  8. The Road to learn React书籍学习笔记(第二章)

    The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...

  9. 【React】学习笔记(一)——React入门、面向组件编程、函数柯里化

    课程原视频:https://www.bilibili.com/video/BV1wy4y1D7JT?p=2&spm_id_from=pageDriver 目录 一.React 概述 1.1.R ...

随机推荐

  1. 日志:using the Connector/J connection property 'autoReconnect=true' to avoid this problem

    com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was581 ...

  2. jquery操作input值总结

    获取选中的值获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本var item = $ ...

  3. ARM Linux Qt 5.x.x 无标题栏

    /********************************************************************************* * ARM Linux Qt 5. ...

  4. pysproto bug修复

    最近,找隔壁组的同学测试了一下我的pysproto,他们提了很多有益的建议,非常感谢. 在测试中,出现了一次诡异的coredump.当数据变大的时候,就有很大的机率遇上double free.在spr ...

  5. 【php学习】PHP 入门经典第一章笔记

    第一章: php在线手册:http://php.net/manual/zh/index.php 在开始学习PHP之前,先来看一个合格的PHP程序员今后应具备哪些知识,这里只是笔者的一些总结,希望对读者 ...

  6. 各种报错各种坑 webpack让我在学习的过程中一度想要放弃

    由于拓展部分不是必须的,只是可以增强用户体验,但是有些时候页面给分页预留的位置不够,这个时候我们就可以通过设置来除去这一部分 子分区由两种创建方法,一种是不定义每个子分区子分区的名字和路径由分区决定, ...

  7. Android中ExpandableListView的使用

    ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下: 首先:在layout的xml文件中定义一个ExpandableListView < L ...

  8. job history 的查看

    linux shell 可以启动 mapred historyserver 然后根据显示的端口hostname+port进行访问(一般默认端口是19888)

  9. commonJS

    摘自阮一峰博客:http://javascript.ruanyifeng.com/nodejs/module.html 目录 概述 module对象 module.exports属性 exports变 ...

  10. uva1635

    /* 哑元 组合数的递推整除判断_________________________________________________________________________________ #i ...