一、 首先缕清楚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)的更多相关文章

  1. react创建组件的几种方式及其区别

    react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件   ③.es6形式的extends React.Component定义的组 ...

  2. React创建组件的三种方式及其区别

    内容转载于http://www.cnblogs.com/wonyun/p/5930333.html React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归; 具体的三种方式: ...

  3. React创建组件的三种方式比较

    推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...

  4. React创建组件的三种方式比较和入门实例

    推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...

  5. 四、React创建组件、 JSX使用、绑定数据、引用图片方式、数组(列表)循环输出

    接:https://www.cnblogs.com/chenxi188/p/11702799.html 用上节建好的my-app项目: my-app/ README.md node_modules/ ...

  6. react 创建组件 (四)Stateless Functional Component

    上面我们提到的创建组件的方式,都是用来创建包含状态和用户交互的复杂组件,当组件本身只是用来展示,所有数据都是通过props传入的时候,我们便可以使用Stateless Functional Compo ...

  7. react 创建组件 (二)component

    因为ES6对类和继承有语法级别的支持,所以用ES6创建组件的方式更加优雅,下面是示例: import React from 'react'; class Greeting extends React. ...

  8. react 创建组件 (一)createClass

    如果你还没有使用ES6语法,那么定义组件,只能使用React.createClass这个helper来创建组件,下面是一段示例: var React = require("react&quo ...

  9. React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...

随机推荐

  1. 2016年蓝桥杯省赛A组c++第1题

    /* 某君新认识一网友. 当问及年龄时,他的网友说: “我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提 ...

  2. [development][security][suricata] suricata 使用与调研

    0: OISF:https://oisf.net/ 1: suricata是什么 https://suricata-ids.org/ 2:安装 https://redmine.openinfosecf ...

  3. 转:jsp内置对象中page与pageContext与el内置对象pageScope与pageContext区别

    原文地址:jsp内置对象中page与pageContext与el内置对象pageScope与pageContext区别 首先说明一下jsp9大内置对象 (1)HttpSession类的session对 ...

  4. 使用@import导入实现了ImportBeanDefinitionRegistrar接口的类,不能被注册为bean

    今天在调试公司spring项目的时候发现了这样一个问题,由于我们的项目使用的是springboot就以springboot为例,代码如下: @Import({DataSourceRegister.cl ...

  5. shiro默认过滤器

  6. mongodb和spring的整合

    所需jar包 mongodb.xml文件代码

  7. Word Embedding理解

    一直以来感觉好多地方都吧Word Embedding和word2vec混起来一起说,所以导致对这俩的区别不是很清楚. 其实简单说来就是word embedding包含了word2vec,word2ve ...

  8. 笔记:mysql升序排列asc,降序排列desc

    经常会忘记mysql中升序和降序用什么字符来表示,现在就做个笔记:升序排列asc,降序排列desc,举个例子,下面是按时间降序调用栏目的文章,也即是栏目最新文章 [e:loop={"sele ...

  9. 20181211 Oracle Parallel

    如下用Select作为参考, Select 在sql server中如果直接查询大量的数据,方式为给列增加Index,可以提高效率.如果查询数据量非常大的时候其实效率依旧不高,而且index在增删改中 ...

  10. python的运行机制

    不需要生成二进制代码,python解释器把源码->字节码,然后在执行这些字节码. 解释器的具体工作: 1.完成模块(module)的加载和链接 2.将源代码编译成pyCodeObject(字节码 ...