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 ...
随机推荐
- 2016年蓝桥杯省赛A组c++第1题
/* 某君新认识一网友. 当问及年龄时,他的网友说: “我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提 ...
- [development][security][suricata] suricata 使用与调研
0: OISF:https://oisf.net/ 1: suricata是什么 https://suricata-ids.org/ 2:安装 https://redmine.openinfosecf ...
- 转:jsp内置对象中page与pageContext与el内置对象pageScope与pageContext区别
原文地址:jsp内置对象中page与pageContext与el内置对象pageScope与pageContext区别 首先说明一下jsp9大内置对象 (1)HttpSession类的session对 ...
- 使用@import导入实现了ImportBeanDefinitionRegistrar接口的类,不能被注册为bean
今天在调试公司spring项目的时候发现了这样一个问题,由于我们的项目使用的是springboot就以springboot为例,代码如下: @Import({DataSourceRegister.cl ...
- shiro默认过滤器
- mongodb和spring的整合
所需jar包 mongodb.xml文件代码
- Word Embedding理解
一直以来感觉好多地方都吧Word Embedding和word2vec混起来一起说,所以导致对这俩的区别不是很清楚. 其实简单说来就是word embedding包含了word2vec,word2ve ...
- 笔记:mysql升序排列asc,降序排列desc
经常会忘记mysql中升序和降序用什么字符来表示,现在就做个笔记:升序排列asc,降序排列desc,举个例子,下面是按时间降序调用栏目的文章,也即是栏目最新文章 [e:loop={"sele ...
- 20181211 Oracle Parallel
如下用Select作为参考, Select 在sql server中如果直接查询大量的数据,方式为给列增加Index,可以提高效率.如果查询数据量非常大的时候其实效率依旧不高,而且index在增删改中 ...
- python的运行机制
不需要生成二进制代码,python解释器把源码->字节码,然后在执行这些字节码. 解释器的具体工作: 1.完成模块(module)的加载和链接 2.将源代码编译成pyCodeObject(字节码 ...