当前位置: 首页 > news >正文

0201基础-组件-React

1 组件和模块

1.1 模块

对外提供特定功能的js程序,一般就是一个js文件

  • 为什么拆分模块呢?随着业务逻辑增加,代码越来越多,越来越复杂。
  • 作用:复用js,简化js,提高js运行效率

1.2 模块化

当应用的js都是以模块来编写时,这个应用就是一个模块化的应用。

模块化的演变:参考JS模块化

1.3 组件

  • 理解:用来实现局部功能效果的代码和资源的集合(html/css/js/images等等)
  • 作用:复用编码,简化项目编码,提高运行效率

1.4 组件化

当应用以多组件的方式实现,这个应用就是一个多组件的应用。

组件化的发展:

  • Redux 演变过程01:组件化过程
  • 前端构建演进

2 开发者工具

chrome浏览器插件React Developer Tools,通过Chrome应用商店或者下载离线插件安装,图标如下所示:在这里插入图片描述

3 React组件

3.1 函数式组件

定义一个简单的函数式组件,代码如下:

  <script type="text/babel">// 1.创建函数式组件function MyComponent() {// 此处this undefined babel编译之后开启严格模式console.log(this);return <h2>函数定义的组件(适用于简单组件的定义)</h2>}// 2.渲染虚拟DOM到页面ReactDOM.render(<MyComponent/>, document.getElementById('test'))/*注意事项1.组件函数名首字母大写2.渲染组件标签,名称相同,标签闭合执行ReactDom.render(标签, 容器)之后流程  1.React解析组件标签,找到了MyComponent组件。2.发现组件是用函数定义的,随后调用函数,把虚拟DOM转为真实DOM,随后呈现在页面上。*/</script>

在浏览器中通过开发者工具查看,如下图3.1-1所示:在这里插入图片描述

把Demo函数复制到babel.cn在线工具,编译后代码3.2-1-2所示:

"use strict";function MyComponent() {// 此处this undefined babel编译之后开启严格模式console.log(this);return /*#__PURE__*/React.createElement("h2", null, "\u51FD\u6570\u5B9A\u4E49\u7684\u7EC4\u4EF6(\u9002\u7528\u4E8E\u7B80\u5355\u7EC4\u4EF6\u7684\u5B9A\u4E49)");
}
  • 开启严格模式后,this不在指向windows
  • jsx语法最终被编译为js

3.2 类式组件

定义组件代码如下:

  <script type="text/babel">// 1.类式组件class MyComponent extends React.Component {// 此处this undefined babel编译之后开启严格模式render() {// render 放在了MyComponent的原型对象上,供实例使用// 此处this指向MyComponent的实例对象console.log(this);return <h2>我是用类定义的组件(适用于复杂组件的定义)</h2>}}// 2.渲染虚拟DOM到页面ReactDOM.render(<MyComponent/>, document.getElementById('test'))/*1.React解析组件标签,找到了MyComponent组件。2.发现组件是用类定义的,随后new该类的实例,通过该实例调用原型上的render方法3.将render返回的虚拟DOM转为真实DOM,随后呈现在页面上*/</script>

控制台输出:在这里插入图片描述

  • React三大属性
    • state
    • props
    • refs

后记

❓QQ:806797785

⭐️源代码仓库地址:https://gitee.com/gaogzhen/react-study

参考:

[1]尚硅谷React教程(2022加更,B站超火react教程)[CP/OL].2020-12-15.p7-p11.

http://www.lryc.cn/news/31154.html

相关文章:

  • 论文笔记 | Conducting research in marketing with quasi-experiments
  • 有关Android导览(Android Navigation component)
  • 01 C语言计算
  • java单元测试简介(基于SpringBoot)
  • Linux常用命令操作
  • SpringCloud GateWay配置—TLS 和 SSL、Http超时配置
  • python Django中的cookies和session会话保持技术
  • vue3的v-model指令
  • Matlab小波去噪——基于wden函数的去噪分析
  • 分布式对象存储——Apache Hadoop Ozone
  • Linux 和数据库笔记-03
  • 布尔定律---布尔代数的基本定律
  • OSG三维渲染引擎编程学习之七十五:“第七章:OSG场景图形交互” 之 “7.6 多视图”
  • 【计算机】单位制前缀的歧义-KB、kb、MB混用
  • nodejs调用浏览器打开URL链接
  • ARM uboot 的移植2-从三星官方 uboot 开始移植
  • js作用域和作用域链
  • C语言字符串
  • Eureka注册中心快速入门
  • xmu 离散数学 卢杨班作业详解【1-3章】
  • mvn命令
  • JS - 事件循环EventLoop
  • 【Java基础】30分钟Git 从入门到精通
  • 0100 MySQL03
  • 32- PyTorch基础 (PyTorch系列) (深度学习)
  • 用gdb.attach()在gdb下断点但没停下的情况及解决办法
  • Linux入门篇-作业(jobs)调度(本质仍然是进程)
  • vue 监听 取消监听
  • 0103深度优先搜索和单点连通-无向图-数据结构和算法(Java)
  • 进销存管理系统