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
)

原文地址:https://www.cnblogs.com/hughes5135/p/8777929.html

时间: 2024-08-28 23:12:32

React创建组件的不同方式(ES5 & ES6)的相关文章

react创建组件的三种方式

react创建组件的三种方式: 1.函数式无状态组件 2.es5方式React.createClass组件 3.es6方式extends React.Component 三种创建方式的异同   1.函数式无状态组件 (1)语法 1 function myComponent(props) { 2 return 3 <div>Hello {props.name}</div> 4 } (2)特点 ● 它是为了创建纯展示组件,这种组件只负责根据传入的props来展示,不涉及到state状态

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

React创建组件具体的三种方式: 1.函数式定义的无状态组件 2.es5原生方式React.createClass定义的组件 3.es6形式的extends React.Component定义的组件 虽然有三种方式可以定义React组件,但是它们有什么不同呢?什么情况下应该使用哪种定义方式呢?请继续往下看 接下来我们先说一下三种方式有什么区别? 1.无状态函数式组件 它是为了创建纯展示组件,这种组件只负责根据传入的props来展示,不涉及到要state状态的操作. 无状态函数式组件形式上表现为

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

react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件   ③.es6形式的extends React.Component定义的组件 1.无状态函数式组件 创建无状态函数式组件形式是从React 0.14版本开始出现的.它是为了创建纯展示组件,这种组件只负责根据传入的props来展示,不涉及到要state状态的操作.具体的无状态函数式组件,其官方指出: 在大部分React代码中,大多数组件被写成无状态的组件,通过简单组合可以构

React创建组件的3种写法

React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归:具体的三种方式: 函数式定义的无状态组件 es5原生方式React.createClass定义的组件 es6形式的extends React.Component定义的组件 虽然有三种方式可以定义react的组件,那么这三种定义组件方式有什么不同呢?或者说为什么会出现对应的定义方式呢?下面就简单介绍一下. (1)无状态函数式组件 创建无状态函数式组件形式是从React 0.14版本开始出现的.它是为了创建纯展示组件,这

四、React创建组件、 JSX语法 绑定数据

接:https://www.cnblogs.com/chenxi188/p/11702799.html 用上节建好的my-app项目: my-app/ README.md node_modules/ package.json .gitignore public/ favicon.ico index.html manifest.json src/ App.css App.js App.test.js index.css index.js logo.svg 一.绑定状态数据state 1.在src目

react-webpack,react中组件生命周期简单展示

首先配置下webpack.config.js module.exports={ entry:{ demo:'./app/app.js' }, output:{ path:__dirname+'/build', filename:'[name].js', library:'game', libraryTarget:'umd' }, module:{ loaders:[ { test:/\.js$/, loader:'jsx-loader' } ] } } 入口文件entry,整合js后输出outp

React Native创建组件的三种方式

创建组件的三种方式 1.ES6创建组件的方式 export default class HelloComponent extends Component{ render(){ return <Text style={{color: 'red'}}>Hello</Text> } } 2.ES5创建组件的方式 var HelloComponent = React.createClass({ render(){ return <Text style={{color: 'red'}}

React/React Native 的ES5 ES6写法对照表

转载: http://bbs.reactnative.cn/topic/15/react-react-native-%E7%9A%84es5-es6%E5%86%99%E6%B3%95%E5%AF%B9%E7%85%A7%E8%A1%A8 英文版: https://babeljs.io/blog/2015/06/07/react-on-es6-plus 很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends

react中创建组件

第1种 - 创建组件的方式 > 使用构造函数来创建组件,如果要接收外界传递的数据,需要在 构造函数的参数列表中使用`props`来接收:> 必须要向外return一个合法的JSX创建的虚拟DOM: 创建组件: JSXfunction Hello () { // return null return <div>Hello 组件</div> } 为组件传递数据: // 使用组件并 为组件传递 props 数据 <Hello name={dog.name} age={d