React创建组件的不同方式(ES5 & ES6)
一、 首先缕清楚React.createElement、React.createClass、React.Component之间的关系
1. React.createElement(HTML element) & React.createClass(javascript DOM)
>> 使用Javascript DOM创建HTML元素
// 创建lu元素
var ul = document.createElement('ul')
// 创建class属性
var listClass = document.createAttribute('class')
// 添加class值为listClass
listClass.value('listClass');
// 将class添加至ul中
ul.setAttribute(listClass ) // 将ul添加值body中
document.body.appendChild(ul);
>> 使用React.createElement创建元素 [divClass可以直接渲染到body中,或者作为createElement属性传入]
//使用createClass创建div组件类
var divClass = React.createClass({
render() {
return (
<div className='testClass'>测试文字</div>
)
}
}) // 使用createElement创建div元素
var div = React.createElement('div', {className: 'divClass'}, '测试文字')
// 或者
var div = React.createElement(divClass, null, null) // 添加至body ReactDOM.render(
div | divClass,
document.body
)
二、ES5创建组件 : React.createClass
var Item = React.createClass({
// 默认为组件名
displayName: 'Item' ,
// 设置属性类型检测
propTypes:{},
// 默认属性
getDefaultProps() {
return {
propsData: '测试props'
}
},
// 初始化数据
getInitialState() {
return {
stateData: '测试state'
}
},
//外部函数或组件
mixins: [foo, bar],
// 测试方法
testFun() {
// this返回当前react实例
console.log(this)
},
// 组件渲染
render() {
return (<div data={this.props.propsData} onClick={this.testFun}>{this.state.stateData}</div>)
}
})
ReactDOM.render(
<Item/>,
document.body
)
三 、ES6创建组件 : React.Component
>> this.testFun = this.testFun.bind(this) 和.bind(this) 二选一
class Item extends React.Component {
// 构造器初始化props和state
constructor(props) {
super(props)
this.state = {
stateData: '初始化state'
},
// 如div内不使用bind(this)绑定实例this, 则需在构造器中绑定
this.testFun = this.testFun.bind(this)
}
// 没有mixins
// 默认props
static defaultProps() {
return {
propData: '默认props'
}
}
testFun() {
console.log(this)
}
render() {
return (
<div data={this.props.propData} onClick={this.testFun.bind(this)}>{this.state.stateData}</div>
)
}
}
// 类型检测放在外面
Item.propTypes = {}
ReactDOM.render(
<Item/>,
document.body
)
React创建组件的不同方式(ES5 & ES6)的更多相关文章
- react创建组件的几种方式及其区别
react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件 ③.es6形式的extends React.Component定义的组 ...
- React创建组件的三种方式及其区别
内容转载于http://www.cnblogs.com/wonyun/p/5930333.html React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归; 具体的三种方式: ...
- React创建组件的三种方式比较
推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...
- React创建组件的三种方式比较和入门实例
推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...
- 四、React创建组件、 JSX使用、绑定数据、引用图片方式、数组(列表)循环输出
接:https://www.cnblogs.com/chenxi188/p/11702799.html 用上节建好的my-app项目: my-app/ README.md node_modules/ ...
- react 创建组件 (四)Stateless Functional Component
上面我们提到的创建组件的方式,都是用来创建包含状态和用户交互的复杂组件,当组件本身只是用来展示,所有数据都是通过props传入的时候,我们便可以使用Stateless Functional Compo ...
- react 创建组件 (二)component
因为ES6对类和继承有语法级别的支持,所以用ES6创建组件的方式更加优雅,下面是示例: import React from 'react'; class Greeting extends React. ...
- react 创建组件 (一)createClass
如果你还没有使用ES6语法,那么定义组件,只能使用React.createClass这个helper来创建组件,下面是一段示例: var React = require("react&quo ...
- React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值
创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...
随机推荐
- vsftp设置不同用户登录ftp的根目录不同
创建三个用户 [root@SHM-Storage-EF ~]# useradd kids [root@SHM-Storage-EF ~]# useradd mini [root@SHM-Storage ...
- ORM Active Record Data Mapper
What's the difference between Active Record and Data Mapper? https://www.culttt.com/2014/06/18/whats ...
- wpf数据绑定:xml数据绑定
wpf中可以通过XmlDataProvider,来实现xml数据的绑定.它通过XmlDataProvider来绑定外部资源,需要命名一个 x:Key 值,以便数据绑定目标可对其进行引用,Source设 ...
- 内核态与用户态通信 之 sockopt
转自:http://blog.csdn.net/jk110333/article/details/8642261 用户态与内核态交互通信的方法不止一种,sockopt是比较方便的一个,写法也简单. ...
- vue中封装一个全局的弹窗js
/** * Created by yx on 2017/12/21. */ export default { /** * 带按钮的弹框 * <!--自定义提示标题,内容,单个按钮事件--> ...
- linux清空历史记录
前几天弄了个Linux服务器做网站,发现在不同终端登陆时,上下键都会出现一堆无用的命令,搜了一下解决方法,做个笔记. 在Linux中,每个用户目录下都有一个.bash_history文件用于保存历史命 ...
- ubuntu安装jupyter 并设置远程访问
Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,方程,可视化和说明文本的文档. 简单的介绍就是:Jupyter Notebook是Ipython的升级版,而Ipyt ...
- 并发编程---Process对象的其他属性或方法
Process对象的其他属性或方法 #join方法 from multiprocessing import Process import time,os ''' 需求:让主进程等着子进程运行完毕,才能 ...
- 云服务器--linux系统操作命令以及安装ngnix记录,以及手动部署本地文件
1.控制台登陆服务器,需要首先知道服务器ip和密码,,命令是 ssh root@1.1.1.1(服务器IP),然后输入密码登入服务器 2.查看linux 版本的系统命令是 cat /etc/redha ...
- python的开发语言介绍
-开发语言: 高级语言:python.java.c#.php.GO.ruby.c++ ===>字节码 低级语言:c.汇编 ===>机器码 语言之间的对比: PHP:适用于写网页, ...