本小将讲述在 React 中,
1、通过函数 function 方式创建组件并分离成单独的组件实现,然后传递参数给组件使用
2、通过 关键字 class 来创建组件,并分离成单独的组件实现,然后传递参数给组件使用以及创建私有属性使用

1 React中创建组件方式一 function

1.1 创建组件并在浏览器中渲染效果
//第一步 导入依赖
//这两个导入进,接收的成员变量名称必须这样写//用来创建组件、虚拟DOM元素 生命周期
import React from 'react';
//所创建好的组件和虚拟DOM放到页面上展示
import ReactDOM from 'react-dom';//创建组合的第一种方式
function HelloWorld() {//在组件中 return 一个null 则表示此组件是空的 什么都不会渲染return null;
}const rootDiv = <div>这里是创建组件的第一种方式<hr/><HelloWorld/></div>;//第三步 使用ReactDOM 把虚拟DOM 渲染到页面上
// 参数一 要渲染的虚拟DOM元素
// 参数二 指定页面上的容器
ReactDOM.render(rootDiv, document.getElementById('app'));

运行在浏览器中

在这里我们创建了一个 HelloWorld 组件,在组件中返回了null ,所以在浏览器中什么这个组件什么也没有渲染。

//创建组合的第一种方式
function HelloWorld() {//在组件中 return 一个null 则表示此组件是空的 什么都不会渲染// return null;//在这里必须返回一个合法的 JSX 虚拟 DOM 元素return <div>这里是 HelloWorld 组件 </div>
}

然后运行在浏览器中的效果

1.2 为组件传递数据
//第一步 导入依赖
//这两个导入进,接收的成员变量名称必须这样写//用来创建组件、虚拟DOM元素 生命周期
import React from 'react';
//所创建好的组件和虚拟DOM放到页面上展示
import ReactDOM from 'react-dom';//创建组合的第一种方式
//传入参数
function HelloWorld(props) {//在组件中 return 一个null 则表示此组件是空的 什么都不会渲染// return null;//在这里必须返回一个合法的 JSX 虚拟 DOM 元素//在这里需要注意的是 形参 props 的值永远是只读的,不可以重新被赋值return <div>这里是 HelloWorld 组件 传入参数 name : {props.name} age :{props.age}</div>;
}const people = {name: '张三',age: 29
};
const rootDiv = <div>这里是创建组件的第一种方式<hr/>{/*使用组件并传入参数*/}<HelloWorld name={people.name} age={people.age}/></div>;//第三步 使用ReactDOM 把虚拟DOM 渲染到页面上
// 参数一 要渲染的虚拟DOM元素
// 参数二 指定页面上的容器
ReactDOM.render(rootDiv, document.getElementById('app'));


在传递参数的时候,我们可以注意一下

const rootDiv = <div>这里是创建组件的第一种方式<hr/>{/*使用组件并传入参数 这里是将所有的属性分别写出来*/}<HelloWorld name={people.name} age={people.age}/><hr/>{/*使用组件并传入参数 如果属性比较多,不逐一写出来时,可以这样传参数*/}{/* ... 个点代表展开 es6语法*/}<HelloWorld {...people}/></div>;
1.3 将编写的 HelloWorld 组件抽离

在src目录下创建components 文件夹,创建 HelloWorld.jsx文件

//创建组合的第一种方式
//传入参数
import React from 'react';function HelloWorld(props) {//在组件中 return 一个null 则表示此组件是空的 什么都不会渲染// return null;//在这里必须返回一个合法的 JSX 虚拟 DOM 元素//在这里需要注意的是 形参 props 的值永远是只读的,不可以重新被赋值return <div>这里是 HelloWorld 组件 传入参数 name : {props.name} age :{props.age}</div>;
}//把组件暴露出去
export default HelloWorld

或者写成

//创建组合的第一种方式
//传入参数
import React from 'react';export function HelloWorld(props) {//在组件中 return 一个null 则表示此组件是空的 什么都不会渲染// return null;//在这里必须返回一个合法的 JSX 虚拟 DOM 元素//在这里需要注意的是 形参 props 的值永远是只读的,不可以重新被赋值return <div>这里是 HelloWorld 组件 传入参数 name : {props.name} age :{props.age}</div>;
}

然后在 index.js 中使用的时候导入

//导入HelloWorld组件
//默认,如果不做单独配置的话,不能省略 .jsx 后缀名
import HelloWorld from './components/HelloWorld.jsx'

如果要省略后缀名,需要在webpack.config.js 配置文件中

配置好后重新运行项目,在导入组件时就可以写成

//导入HelloWorld组件
//默认,如果不做单独配置的话,不能省略 .jsx 后缀名
//配置好resolve 后,可以不写.jsx后缀名,程序自动补全
import HelloWorld from './components/HelloWorld'

然后在这里我们可以使用别名来表示路径

//导入HelloWorld组件
//默认,如果不做单独配置的话,不能省略 .jsx 后缀名
// 这里使用到的@ 表示项目根目录中的 src 这一层
import HelloWorld from '@/components/HelloWorld.jsx'

这里使用到了 @ 符号,那么在 webpack.config.js 中进行配置

2 React中使用class创建组件方式

ES6 中 class 关键字是实现面向对象的

//创建组合的第二种方式
//传入参数
import React from 'react';export default class ClassHelloWorld extends React.Component {//在组件中必须有 render函数 用来渲染 DOM结构render() {return (<div>这里是使用class关键字创建的组件</div>);}
}


然后在index.js中使用时,先导入

//第一步 导入依赖
//这两个导入进,接收的成员变量名称必须这样写//用来创建组件、虚拟DOM元素 生命周期
import React from 'react';
//所创建好的组件和虚拟DOM放到页面上展示
import ReactDOM from 'react-dom';
//导入HelloWorld组件
//默认,如果不做单独配置的话,不能省略 .jsx 后缀名
// 这里使用到的@ 表示项目根目录中的 src 这一层
import HelloWorld from '@/components/HelloWorld';
//这里是使用 class 创建的组件
import ClassHelloWorld from '@/components/ClassHelloWorld';
//这里j 模拟数据
const people = {name: '张三',age: 29
};
const rootDiv = <div>这里是创建组件的第一种方式<hr/>{/*使用组件并传入参数 这里是将所有的属性分别写出来*/}<HelloWorld name={people.name} age={people.age}/><hr/>{/*使用组件并传入参数 如果属性比较多,不逐一写出来时,可以这样传参数*/}{/* ... 个点代表展开 es6语法*/}<HelloWorld {...people}/><hr/>这里是创建组件的第二种方式<hr/>{/*使用组件*/}<ClassHelloWorld/></div>;//第三步 使用ReactDOM 把虚拟DOM 渲染到页面上
// 参数一 要渲染的虚拟DOM元素
// 参数二 指定页面上的容器
ReactDOM.render(rootDiv, document.getElementById('app'));
2.2 向 class 方式创建的组件中传入参数
  <ClassHelloWorld {...people}/>

在 ClassHelloWorld 组件中通过 props 关键字使用传入的参数

//创建组合的第二种方式
//传入参数
import React from 'react';export default class ClassHelloWorld extends React.Component {//在组件中必须有 render函数 用来渲染 DOM结构render() {return (<div>这里是使用class关键字创建的组件<p> 传递的参数 name:{this.props.name} age:{this.props.age}</p></div>);}
}

浏览器中效果

在 class 组件中,可通过 this.state 来定义使用组件私有属性数据

//创建组合的第二种方式
//传入参数
import React from 'react';export default class ClassHelloWorld extends React.Component {//在构建函数中//初始化私有数据 constructor(){super()this.state={city:"中国山西太原"}}//在组件中必须有 render函数 用来渲染 DOM结构render() {return (<div>这里是使用class关键字创建的组件{/*这里通过 this.props 来调用外部传递过来的参数*/}<p> 传递的参数 name:{this.props.name} age:{this.props.age}</p>{/*然后在这里通过 this.state 来调用私有数据*/}<p> 这里是组件内的私有属性{this.state.city}</p></div>);}
}

3 React中function 与class 两种创建方式的对比

  • 使用class 关键字创建的组件,有自己的私有数据和生命周期,使用function 创建的组件,只有props,没有自己私有数据和生命周期
  • 用 function 创建出来的组件中做 无状态组件,用class关键字创建出来的组件 叫做有状态组件

4 组件中 props 与state/data 的区别

4.1 区别一
  • props 中的数据都是外界传递过来的
  • state / data 中的数据 都是组件私有的
4.2 区别二
  • props 中的数据都是只读的,不能重新赋值
  • state/data 中的数据是可读可写的

5 列表实例

//第一步 导入依赖
//这两个导入进,接收的成员变量名称必须这样写//用来创建组件、虚拟DOM元素 生命周期
import React from 'react';
//所创建好的组件和虚拟DOM放到页面上展示
import ReactDOM from 'react-dom';//父组件
class CourseList extends React.Component {constructor(props) {super(props);this.state = {courseList: [{id: 1, userNmae: '张三', courseName: '语文'},{id: 2, userNmae: '张三2', courseName: '语文2'},{id: 3, userNmae: '张三3', courseName: '语文3'}]};}render() {return (<div><h1>课程统计列表</h1>{/*这里通过map 来构建*/}{this.state.courseList.map(item => <CourseItem {...item}/>)}</div>);}
}//列表中条目的组件class CourseItem extends React.Component {render() {return (<div key={this.props.id}><h2>姓名:{this.props.userNmae}</h2><p>课程内容: {this.props.courseName}</p></div>);}
}//第三步 使用ReactDOM 把虚拟DOM 渲染到页面上
// 参数一 要渲染的虚拟DOM元素
// 参数二 指定页面上的容器
ReactDOM.render(<CourseList/>, document.getElementById('app'));


完毕

React基础篇(四)之创建组件方式分析相关推荐

  1. Vue实战篇四:创建多步骤表单

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  2. 【Youtobe trydjango】Django2.2教程和React实战系列四【创建Django应用】

    [Youtobe trydjango]Django2.2教程和React实战系列四[创建Django应用] 1. 创建应用 2. 修改应用 1. 创建应用 打开cmd黑框,也可以用下列方法打开项目根目 ...

  3. React基础篇(五)css样式的使用

    本小节主要讲述在 React中使用css scss 以及其他第三方如bootstrap的css样式配置 1 前言 在 JSX 中,如果需要写行内样式,不能为 style 设置字符串的值,而是应该写成 ...

  4. React基础篇(三)之 webpack打包项目配制

    1.本篇章配置一个 webpack 打包项目 2.简述 jsx 语法配置支持 1 初始化项目 使用 IDE 打开目录 在命令行中初化化项目 npm init -y 然后安装 webpack cnpm ...

  5. React基础篇(二)之点击button修改属性值

    本篇将实现点击一个按钮动态修改数据 上一篇 React 项目的初始化创建 1 index.html 中 <!DOCTYPE html> <html lang="en&quo ...

  6. Vue2基础篇-21-非单文件组件

    1. 基本使用 <!DOCTYPE html> <html><head><meta charset="UTF-8"><titl ...

  7. kafka基础篇(四)——kafka消费者客户端

    一.入门程序 先上代码,从代码入手,讲解kafka消费者客户端的细节. public class HelloKafkaConsumer {public static void main(String[ ...

  8. 【GIT 基础篇二】创建版本库与提交

    最近在项目过程中,着实是犯懒了,虽然公司使用git管理,但是感觉自己已经严重的依赖页面工具了,这次正好借助公司不是很忙,把git常用的命令整理记录一下,今天我们主要就是整理创建仓库以及修改提交功能. ...

  9. vue从入门到精通之基础篇(二)组件

    (1).局部组件的使用 ​ 渲染组件-父使用子组件 1: 创建子组件(对象) var Header = { template:'模板' , data是一个函数,methods:功能,component ...

最新文章

  1. PMP-【第6章 项目进度管理】-2021-2-11(136页-160页)
  2. WD1600AAJS AAKS 固件 数据恢复
  3. 抓住金三银四好机会,超齐全java大厂面试题汇总(请自寻学习查找答案)
  4. Resin3.19 连接池配置
  5. centos 7.2 mysql 允许_CentOS 7.2 mysql-5.7.17 审计插件安装、开启与设定
  6. 今日腊八节,祝福送上!
  7. 5.11 学习日记,首页banner做好了
  8. Kotlin学习笔记30 补充 作用域函数
  9. 林斌减持小米股份三天套现3.4亿引关注 小米官方、林斌齐回应...
  10. 分布式架构的演进过程,docker面试题汇总
  11. esxi命令关机虚拟机_虚拟机镜像使用说明
  12. 20190429 - 如何访问 macOS 的 httpd、mysql 等服务
  13. 如何批量将PNG格式转化为JPG格式
  14. python 管道游戏_用python写游戏之 Flappy Bird
  15. 想成为挣钱的游戏程序员要经历多少阶段?
  16. shipyard中文版安装教程(附安装脚本)
  17. matlab储存指定几个参数,如何在Matlab中使用fittype的多个参数
  18. 如何用Python网络爬虫爬取网易云音乐歌曲
  19. 没有群晖却要共享文件?试试HFS搭建精简版NAS吧
  20. vue实现app下载页面,微信提示,自动识别安卓IOS

热门文章

  1. CVPR 2020 论文大盘点—目标跟踪篇
  2. 韩松、朱俊彦等人提出GAN压缩法:算力消耗不到1/9,现已开源
  3. 一图胜千言,这本交互式线代教科书让你分分钟理解复杂概念,佐治亚理工出品...
  4. 最受欢迎中文机器学习课程,台大李宏毅老师公开课2019版上线!
  5. 微软(中国)CTO韦青:人工智能时代还没有真正到来
  6. 自学Python:旋转图像角度
  7. 计算机原理实验八位算术逻辑运算,8位算术逻辑运算计算机组成原理实验一
  8. 对!这就是你要的pandas练习题(❤️❤️)
  9. 今日头条面试题:生成随机数(根据rand5()生成rand7())
  10. odps mapreduce学习笔记