一、 首先缕清楚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. vsftp设置不同用户登录ftp的根目录不同

    创建三个用户 [root@SHM-Storage-EF ~]# useradd kids [root@SHM-Storage-EF ~]# useradd mini [root@SHM-Storage ...

  2. ORM Active Record Data Mapper

    What's the difference between Active Record and Data Mapper? https://www.culttt.com/2014/06/18/whats ...

  3. wpf数据绑定:xml数据绑定

    wpf中可以通过XmlDataProvider,来实现xml数据的绑定.它通过XmlDataProvider来绑定外部资源,需要命名一个 x:Key 值,以便数据绑定目标可对其进行引用,Source设 ...

  4. 内核态与用户态通信 之 sockopt

    转自:http://blog.csdn.net/jk110333/article/details/8642261   用户态与内核态交互通信的方法不止一种,sockopt是比较方便的一个,写法也简单. ...

  5. vue中封装一个全局的弹窗js

    /** * Created by yx on 2017/12/21. */ export default { /** * 带按钮的弹框 * <!--自定义提示标题,内容,单个按钮事件--> ...

  6. linux清空历史记录

    前几天弄了个Linux服务器做网站,发现在不同终端登陆时,上下键都会出现一堆无用的命令,搜了一下解决方法,做个笔记. 在Linux中,每个用户目录下都有一个.bash_history文件用于保存历史命 ...

  7. ubuntu安装jupyter 并设置远程访问

    Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,方程,可视化和说明文本的文档. 简单的介绍就是:Jupyter Notebook是Ipython的升级版,而Ipyt ...

  8. 并发编程---Process对象的其他属性或方法

    Process对象的其他属性或方法 #join方法 from multiprocessing import Process import time,os ''' 需求:让主进程等着子进程运行完毕,才能 ...

  9. 云服务器--linux系统操作命令以及安装ngnix记录,以及手动部署本地文件

    1.控制台登陆服务器,需要首先知道服务器ip和密码,,命令是 ssh root@1.1.1.1(服务器IP),然后输入密码登入服务器 2.查看linux 版本的系统命令是 cat /etc/redha ...

  10. python的开发语言介绍

    -开发语言: 高级语言:python.java.c#.php.GO.ruby.c++    ===>字节码 低级语言:c.汇编   ===>机器码 语言之间的对比: PHP:适用于写网页, ...