创建一个组件可以通过两种方式
**

第一种: ‘通过构造函数创建一个组件’

**

第一步:‘创建组件的文件必须引用react’,并且必须写成下面这行代码

import React from 'react';

第二步:‘导入组件的css样式’

//引入组件的css
import './App.css';

第三步:创建一个构造函数,函数必须有返回值,通常情况下,这里面只能是html文件的内容,并且只能有一个根目录
注意 构造函数的首字母和组件的首字母必须大写
构造函数的名字就是组件的名字

function App(props) {return (<div className="App">{props.name}</div>);
}

第四步:抛出创建好的组件
export default App

第五步: 在src文件中的index.js或者全局js文件中接收

import App from './App';

第六步: 通过reactDOM.render方法,以标签的形式渲染

ReactDOM.render(<div> <App name='dx'></App></div>,
document.getElementById('root'),
function(){console.log('渲染完成了')
});

在index.js文件中的App标签中,通过绑定name属性给App组件传参
在App组件所在的文件中,通过使用构造函数的形参props接收所有的父组件传过来的形参,然后props.name就可以使用父组件传过来的参数了

第二种创建组件的方法

通过es6中的class类来创建组件

class 组件名称首字母大写  extends React.Component {render () {return <div> 1111</div>}
}

React.Component 是react构造好的一个父类,这个父类里面有创建组件的一些必备属性,被继承过来之后,自然就能用来创建组件

构造的组件内部必须有一个render函数,用以渲染当前组件虚拟的demo结构,在render函数中,必须通过return返回一个虚拟demo结构,和并且虚拟demo只能有一个demo结构

创建一个独立文件的组件

import React from 'react'
class Dx extends React.Component {render () {return <div>name: {this.props.name} age: {this.props.age}</div>}
}
export default Dx

在index.js文件中导入,并且以标签的形式渲染到页面中去

import Dx from './components/class.js'
ReactDOM.render(<div> <Dx name='dx' age='18'></Dx></div>,
document.getElementById('root'),
function(){console.log('渲染完成了')
});

在index.js文件的DX标签中,通过绑定属性,name和age给DX组件传参
在Dx组件所在的文件中,通过this.props.name和this.props.age的方式来使用这两个参数,由父组件传向子组件的参数,都是只读的,不能再子组件重新赋值

既然有了构造函数可以创建组件,为什么还要用class来创建组件呢?
因为class可以有自己组件的私有数据,这是两者的区别

来一个class组件升级版

import React from 'react'
class Dx extends React.Component {constructor () {super()this.state = {work: '前端开发工程师'}//存储组件自己的数据}
//如果想要改变class类的属性,必须通过constructor方法 es6语法
//由于组件类是继承的方法,在constructor方法中,必须调用super()方法,es6语法规定render () {return <div>name: {this.props.name} age: {this.props.age} <div>{this.state.work}</div>//调用组件自己存储的数据</div>}
}
export default Dx

因为props只是从父组件接收过来的参数,只能读不能改,react的提供state来储存属于组件自己的数据

最后
对比一下这两种创建组件方式的差异

class创建一个组件相对于构造函数来说,class创建的组件有自己的私有数据,class创建的组件有生命周期,所以更加推荐通过es6的class来创建组件

构造函数创建的组件被称为 无状态组件
class创建的组件被称为 有状态组件

react 创建组件的两种方式相关推荐

  1. 深入解析React创建组件的三种方式

    eact创建组件的三种方式: 1.函数式无状态组件 2.es5方式React.createClass组件 3.es6方式extends React.Component 三种创建方式的异同 1.函数式无 ...

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

    React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归:具体的三种方式: 函数式定义的无状态组件 es5原生方式React.createClass定义的组件 es6形式的ext ...

  3. java jframe添加面板_JFrame添加组件的两种方式

    对JFrame添加组件有两种方式:1) 用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childCompont ...

  4. java jobdetail_Spring创建JobDetail的两种方式

    一.Spring创建JobDetail的两种方式 定时任务两种方式,Spring很好的封装使用Quartz的细节,第一种方式是利用SPring封装的Quartz类进行特定方法的实现,第二种是通过透明的 ...

  5. React类组件的两种写法

    react中类组件的两种写法: 要点:•类组件必须要继承React.Component •类组件中的render()方法,返回值是一个jsx // 方式一: import React from 're ...

  6. Java并发基础01. 传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  7. 【并发技术01】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承 Thread 类,并重写 run() 方法:二是实现 Runnable 接口,覆盖接口中的 run() 方法,并把 Runnable 接口的实现扔给 T ...

  8. ubuntu下创建定时任务的两种方式及常见问题解决方案

    ubuntu下创建定时任务的两种方式及常见问题解决方案 参考文章: (1)ubuntu下创建定时任务的两种方式及常见问题解决方案 (2)https://www.cnblogs.com/maboii/p ...

  9. ubuntu创建用户的两种方式

    ubuntu创建用户有两种方式: useradd和adduser 这两者,就像零件与产品的关系.useradd是DIY,需要自己调配,adduser是品牌机,拿来就能用. 对于创建一般用户来讲,use ...

  10. PyCharm创建app的两种方式

    PyCharm创建app的两种方式 方式1 1-1 在terminal中敲如下代码 python manage.py startapp xxx 1-2 在settings.py中INSTALLED_A ...

最新文章

  1. 再谈浏览器兼容性测试
  2. PHP——获取上传文件的后缀名
  3. mongodb shell基础命令
  4. 儿童节礼包!10 后都开始学编程了,你需要这个阿里技术电子书大全
  5. 理解动态语言inline cache优化
  6. oModel.create will also send to backend directly
  7. json无法解析的字符
  8. 软件测试用例设计方法-判定表法
  9. PHP网站开启gzip压缩,PHP网站程序中开启Gzip压缩的两种方法
  10. openGL超级宝典第七版
  11. pdfjs实现pdf预览
  12. 安川机器人报错_安川机器人伺服驱动器常见的报警代码
  13. 如何用unity做一个合成图片的程序
  14. android常用单词,Android的英语单词记忆软件系统
  15. MCU】可怕,别人把我MCU固件给反汇编了!(逆向)J-FLASH通过下面的选项路径,即可读取所选Flash区域或者所有Flash区域(Entire Chip)安装IDA Pro逆向工具
  16. 职通未来 The Next One——赴一场不一样的招聘会
  17. 用Python批量操作文件
  18. 可扩展的交互式可视化框架,用于衡量新闻中的性别偏见
  19. 思维导图(二):绘制规则
  20. 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

热门文章

  1. JLINK驱动版本更换
  2. Spring常用注解整理
  3. 2016年计算机考研大纲,2016考研计算机大纲解析
  4. python 人脸对比--百度API人脸相似度识别(超简单)
  5. REST服务简介和实践
  6. 宋宝华linux内核驱动代码,宋宝华 《Linux设备驱动开发详解》示例代码之fifo字符设备驱动...
  7. 重磅 | 企业大数据战略规划,看这一篇文章就够了!
  8. scratch节假日课程:春节舞狮
  9. 浅谈电力巡检机器人功能及特点
  10. eNSP教程 —— 物理机如何使用web登录到防火墙