react系列(3)组件创建、检测和移除
来源:互联网 发布:一淘网和淘宝联盟 编辑:程序博客网 时间:2024/06/05 01:27
在React16.0.0版本后,创建组件的主要方法React.createClass被移除了,这个会在后续文章中关于ES5+React+Webpack组合应用中会介绍。本系列文章仍用React.createClass作为创建组件的主要方法。在创建自定义组件时要注意:组件名称首字母必须为大写,否则将不通过。
组件创建
常用的创建组件的方法为React.createClass:
var HelloWorld = React.createClass({ render: function() { return ( <div> <h1>Hello World!</h1> </div> ); } }); ReactDOM.render( <HelloWorld />, document.getElementById('example'));上例中HelloWorld就是一个简单组件。
除了React.createClass外,还可以通过使用React.createElement来创建组件(就是通过脚本嵌套多个元素到一个根元素的方式创建一个组件)。React.createElement的写法:
var ele = React.createElement('ul', { className: 'my-list' }, child1, child2, child3);
第一个参数是一个html标签名称字符串,也可以是一个ReactClasss,这个参数对于createElement来说是必须的。
第二个参数是该标签的属性,这个参数是可选的。
第三个参数是该元素的子节点,同样也是可选的。
React.createElement方法创建并返回一个给定类型的ReactElement元素。
var h1 = React.createElement('h1',null,"Hello World");var div = React.createElement('div',null,h1);ReactDOM.render(div,document.getElementById("example"));通过React.createFactory工厂方法可以批量创建组件:
var CompClass = React.createClass({render:function(){return (<div><h1>{this.props.children}</h1></div>);}});var Comp = React.createFactory(CompClass);var HelloWorld = React.createElement('div',null,Comp(null,'Hello World1'),Comp(null,'Hello World2'));ReactDOM.render(HelloWorld,document.getElementById("example"));(注)上例中通过React.createFactory创建了两个结构一样但内容不同的组件Hello World1和Hello World2,而CompClass仅作为结构提供方。
组件的参数传递可以通过props实现:
var HelloWorld = React.createClass({render:function(){return <h1>Hello {this.props.name}</h1>}});ReactDOM.render(<HelloWorld name="Dear" />,document.getElementById("example"));把参数设置为属性attr,然后在组件渲染中通过{this.props.attr}的方式读取,上例中{this.props.name}的值就是“Dear”。
组件的检测
创建组件后,我们可以通过React.isValidElement()方法来检测组件的有效性,目的是为了增强代码的健壮性,确定传入是否为React Element,防止渲染出错。要注意,React.isValidElement()只对React创建的组件检测有效,对已被转化为纯文本的组件脚本无效。比如说,若React创建的组件放在服务端渲染,返回到前端的将会是一串脚本字符串,React.isValidElement()对这类脚本字符串检测总为false。
var HelloWorld = React.createClass({ render: function() { return ( <div> <h1>Hello World!</h1> </div> ); } }); ReactDOM.render( <HelloWorld />, document.getElementById('example'));var helloWorld_HtmlText = ReactDOMServer.renderToString(<HelloWorld />);console.log(React.isValidElement(<HelloWorld />)); // trueconsole.log(React.isValidElement(helloWorld_HtmlText)); // fase
组件的移除
ReactDOM提供的移除组件:ReactDOM.unmountComponentAtNode(document.getElementById('example'));我们也可以用原生js脚本移除组件:
var f = document.getElementById("example");var childs = f.childNodes; for(var i = 0; i < childs.length; i++) { f.removeChild(childs[i]); }另外,ReactDOM提供了对节点的查找方法:ReactDOM.findDOMNode
<script type="text/babel">var HelloWorld = React.createClass({ render: function() { return ( <div> <h1>Hello World!</h1> </div> ); } }); var reactEle = ReactDOM.render( <HelloWorld />, document.getElementById('example') ); console.log(ReactDOM.findDOMNode(reactEle));</script>查找到的节点对象,可以配合jQuery进行使用。
阅读全文
0 0
- react系列(3)组件创建、检测和移除
- react系列(5)组件内部方法和静态方法
- react 入门-创建组件(3)工厂方法
- 检测USB插入和移除事件
- 检测USB插入和移除事件
- 摄像头检测不到插入和移除
- react组件3种创建方法
- react组件创建方式
- React 创建对话框组件
- 遗留物检测中的物体遗留和移除检测
- React Native组件篇(四) — Touchable系列组件
- 《React-Native系列》13、 组件封装之Dialog(iOS和Android通用)
- 《React-Native系列》19、 ListView组件之上拉刷新(iOS和Android通用)
- 《React-Native系列》组件封装之Dialog(iOS和Android通用)
- 《React-Native系列》19、 ListView组件之上拉刷新(iOS和Android通用)
- React源码分析2 — 组件和对象的创建(createClass,createElement)
- React Native Touchable系列组件
- React学习笔记---创建组件
- struts2入门程序(一)
- 编写程序数一下1到100的所有整数中出现了多少次数字9
- 打造自己的VIM编辑器
- Android脚本插件系列(一):安卓国际化多语自动合入脚本
- 微软亚洲研究院2017年笔试编程题
- react系列(3)组件创建、检测和移除
- 通配符中的字符"*"与正则表达式中字符"*"的区别
- APP与后端通讯安全设计解析(待完善)
- 总结(11.20-11.25)
- 卷积神经网络(CNN)的原理
- 通讯录--动态版本
- pyenv安装
- __weak函数
- 蒟蒻的NOIP2017游记