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 ...
随机推荐
- iOS 线程安全
线程安全: 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题.就好比几个人在同一时修改同一个表格,造成数据的错乱. 解决多线程安全问题的方法 方法一:互斥锁(同步锁) @synchroni ...
- 使用Sqlserver事务发布实现数据同步(sql2008)_Mssq l数据库教程
事务的功能在sqlserver中由来已久,因为最近在做一个数据同步方案,所以有机会再次研究一下它以及快照等,发现还是有很多不错的功能和改进的.这里以sqlserver2008的事务发布功能为例,对发布 ...
- PHP之魔术引号
什么是魔术引号 Warning 本特性已自 PHP5.3.0起废弃并将自PHP5.4.0起移除. 当打开,所有的'(单引号),"(双引号), (反斜线)和NULL 字符都会被自动加上一个反 ...
- json解析出来数据为空解决方法
从APP端或从其他页面post,get过来的数据一般因为数组形式.因为数组形式不易传输,所以一般都会转json后再发送.本以为发送方json_encode(),接收方json_decode(),就解决 ...
- 图->连通性->有向图的强连通分量
文字描述 有向图强连通分量的定义:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly co ...
- LeetCode 953 Verifying an Alien Dictionary 解题报告
题目要求 In an alien language, surprisingly they also use english lowercase letters, but possibly in a d ...
- mysql插入一条记录时有自增id怎么办
①可以把id的值设置为null或者0,这样子mysql都会自己做处理 ②手动指定需要插入的列,不插入这一个字段的数据!
- 洛谷P1955 程序自动分析 [NOI2015] 并查集
正解:并查集+离散化 解题报告: 传送门! 其实题目还挺水的,,,但我太傻逼了直接想挂了,,,所以感觉还是有个小坑点所以还是写个题解记录下我的傻逼QAQ 首先这题一看,就长得很像NOIp关押罪犯?然后 ...
- 经典影响力传播模型LT模型、IC模型
一.LT模型:线性阈值模型 思想:当一个已经激活的节点去试图激活邻居节点而没有成功时,其对邻居节点的影响力被累积而不是被舍弃,这个贡献直到节点被激活或传播过程结束为止.该过程称为‘影响累积’. 过程: ...
- Python 字符串常用方法总结
明确:对字符串的操作方法都不会改变原来字符串的值 1,去掉空格和特殊符号 name.strip() 去掉空格和换行符 name.strip('xx') 去掉某个字符串 name.lstrip() ...