React访问组件元素的子元素(ES5与ES6的对比)
// 创建组件
var NewDom = React.createClass({ // 类名一定要大写开头 render: function () { return ( <ol> { React.Children.map(this.props.children, function (child) { // 获得元素的子元素 console.info(child); return (<li>{child}</li>); }) } </ol> ) } }); ReactDOM.render( <NewDom> <span>123</span> <span>456</span> </NewDom>, document.getElementById('example') );
ES6的写法:
class NewDom extends React.Component {
render() { // 开头花括号一定要和小括号隔一个空格,否则识别不出来
// 标签开头一定要和return一行
return <ol>
{
React.Children.map(this.props.children, function (child) {
return <li>{child}</li>
})
}
</ol>;
}
}
ReactDOM.render(
<NewDom>
<span>123</span>
<span>456</span>
</NewDom>,
document.getElementById('example')
);
React组件的属性props
var NewDom = React.createClass({ // 类名一定要大写
getDefaultProps: function () { // 设置默认属性
return {title: '123'};
},
propTypes: {
title: React.PropTypes.string
},
render: function () {
return (<div>{this.props.title}</div>); // 变量用花括号标识
}
});
ReactDOM.render(
<NewDom />,
document.getElementById('example')
);
ES6
class NewDom extends React.Component {
// 不能在组件定义的时候定义一个属性
render() {
return (<div>1 {this.props.title}</div>)
}
}
NewDom.propTypes = {
title: React.PropTypes.bool
};
NewDom.defaultProps = {title: '123'}; // 设置默认属性
ReactDOM.render(
<NewDom/>,
document.getElementById('example')
);
一般区分两个的原则是,可变的放在state中,不可变的放在props中。
事件
ES5
var NewDom = React.createClass({ // 类名一定要大写开头
btnClick: function (ele) {
console.info(ele);
console.info(this.refs.tex);
},
render: function () {
return (
<div>
<input type="text" ref="tex" />
<input type="button" onClick={this.btnClick} value='click me' />
</div>
);
}
});
ReactDOM.render(
<NewDom/>,
document.getElementById('example')
);
ES6
class NewDom extends React.Component {
btnClick() {
console.info(this); // this为该组件类
console.info(this.refs.tex); //this.refs.tex为组件里面索引为tex的
}
render() {
// 注意bind后面的this
return (
<div>
<input type="text" ref="tex" />
<input type="button" onClick={this.btnClick.bind(this)} value='click me' />
</div>
)
}
}
ReactDOM.render(
<NewDom/>,
document.getElementById('example')
);
ES6的坑
- 类名(组件名)一定要用大写开头,否则自定义的组件无法编译,识别不出来。
- 类中定义render函数要注意两点,见代码注释。
render() {//开头花括号一定要和小括号隔一个空格,否则识别不出来
return <ol>//标签前一半一定要和return一行
{
React.Children.map(this.props.children, function (child) {
return <li>{child}</li>;
})
}
</ol>;
}
- 在class中使用class的变量或者方法,一定要加个this。如this.handlerclick。
- es6 绑定事件需要
onClick={this.func1.bind(this)}。
这样func1和bind里面的参数‘this’的作用域才绑定到了一起(注意es5是不需要这个bind(this)的),func1中如果有this.name这类语句,相当于是使用参数‘this’里面的变量值;或者使用箭头函数func1= (e)=> {函数体}
react代码逻辑很清晰,好维护也好使用。重要的是,需要使用者把从前直接对dom操作的思维方式转换过来,相信会爱上它的。
React访问组件元素的子元素(ES5与ES6的对比)的更多相关文章
- JQuery 获取父级元素、同级元素、子元素等
例: <div> <div id="div_1">这是内容1</div> <div id="div_2">这是内 ...
- 当display=none时,元素和子元素高度为0的解决办法
在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...
- jquery选择器 之 获取父级元素、同级元素、子元素
jquery选择器 之 获取父级元素.同级元素.子元素 一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div" ...
- jquery选择器如何获取父级元素、同级元素、子元素
一.新建页面 <ul> <li>list item 1</li> <li>list item 2</li> <li class=&qu ...
- 父元素与子元素之间的margin-top问题
父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. html代码: <div c ...
- jQuery学习笔记---兄弟元素、子元素和父元素的获取
我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行 ...
- HTML 父元素与子元素之间的margin-top问题
问题: 父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. 代码如下: <div ...
- 父元素与子元素之间的margin-top问题(css hack)(转载)
情况: 父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. 解决方法: 1.修改父元素 ...
- CSS 实现:父元素包含子元素,子元素垂直居中布局
☊[实现要求]:父元素包含子元素,子元素垂直居中布局 <div class="demo5"> <div class="child">A& ...
随机推荐
- RHEL7网络管理之nmcli
在RHEL7中默认使用NetworkManager 守护进程来监控和管理网络设置.nmcli是命令行的管理NetworkManager的工具,会自动把配置写到/etc/sysconfig/networ ...
- linux--杂记(rework)
1.The mind behind Linux https://www.ted.com/talks/linus_torvalds_the_mind_behind_linux 2.Emacs ORG-M ...
- linux 下部署 kafka
参考文章 http://www.cnblogs.com/sunxucool/p/4459020.html http://www.cnblogs.com/oftenlin/p/4047504.html ...
- idhttp的用法
1)POST function PostMethod(http: TIDhttp; URL: string; Params: TStringList): string;var RespData: TS ...
- eclipse里面设置JVM参数的问题
在run----run configuration---Agruments里面设置JVM的参数: -Xms256m -Xmx1024m 肯定还有别的方式设置,今天就先写这一种方法.待续...
- jquery 遍历 数组1
使用了jquery有段时间了,整理下jquery中的遍历问题. 1.jquery 遍历对象 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Tr ...
- SDN 收集一下最近的资料
SDN导论 SDN原理(Openflow)视频 SDN lab SDN Openflow(北航入门简介) 书籍 <深度解析SDN-利益.战略.技术.实践> -张卫峰
- php pdo预处理语句与存储过程
很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制.预处理语句可以带来两大好处: 1.查询仅需解析(或预处理) ...
- 【Visual Lisp】Visual Lisp属性与方法
说明:Visual Lisp属性的获取.赋值和方法的执行有多种形式.然而对于初学者来说一次性就要全部掌握显然是没有必要的,有时候每种方法都是通用的功能都一样我们就没有必要把所有方法都记住.我们只需要掌 ...
- PYTHON第二天
PYTHON之路 4.注释 Python开发规范:每一行不能超过80个字符 # : 代表注释当行 ‘’’ 上下两行 , 三个英文字符的引号,代表注释某一段代码 ‘’’ 知识点用户输入: PYth ...