2023版react知识记录(更新ing)
1. 什么是JSX
?
JSX
是 JavaScript 的扩展标记语言,它允许在 JavaScript 中嵌入 HTML 代码。JSX
可以让你在 JavaScript 代码中编写类似于 HTML 的代码,从而使你的代码更加简洁和易读。
例如,在React
库中,你可以使用JSX
编写组件的HTML
结构。
1 |
|
经过babel
编译后,会变成
1 |
|
createElement
执行后,会变成
1 |
|
2. react18 的 7 个新特性
- RenderApi
- setState 批处理
- flushSync
- 卸载组件时的更新状态警告
- React 组件的返回值
- Strict Mode
- Suspense 不需要 Fallback 来捕获
3. 起源-Component (2024年6月27日更新)
在 React 世界里,一切皆组件,组件可以分为两类,一类是类组件(Class)
,一类是函数组件(Function)
3.1 什么是 React 组件
组件本质上就是函数和类,但是与常规的类和函数不同的是,组件承载了渲染视图的 UI 和更新视图的 setState、useState 等方法
React 对组件的处理流程
对于类组件的执行,是在 react-reconciler/src/ReactFiberClassComponent.js 文件中
1 |
|
对于函数组件的执行,是在 react-reconciler/src/ReactFiberHooks.js 文件中
1 |
|
在 React 调和渲染 fiber 节点的时候,如果发现 fiber tag 是 ClassComponent = 1,则按照类组件逻辑处理,如果是 FunctionComponent = 0 则按照函数组件逻辑处理。当然 React 也提供了一些内置的组件,比如说 Suspense 、Profiler 等。
3.2 二种不同 React 组件
class 类组件
在 class 组件中,除了继承 React.Component
,底层还加入了 updater
对象,组件中调用的 setState 和 forceUpdate 本质上是调用了 updater
对象上的 enqueueSetState
和 enqueueForceUpdate
方法。
React 底层是如何定义类组件的呢?
1 |
|
如上可以看出 Component 底层 React 的处理逻辑是,类组件执行构造函数过程中会在实例上绑定 props 和 context ,初始化置空 refs 属性,原型链上绑定setState、forceUpdate 方法。对于 updater,React 在实例化类组件之后会单独绑定 update 对象。
为了更好地使用 React 类组件,我们首先看一下类组件各个部分的功能:
1 |
|
函数组件
React16.8 hooks问世之后,对函数组件的功能加以强化,函数组件甚至完全取缔类组件。
下面是一个常规的函数组件:
1 |
|
注意:不要尝试给函数组件 prototype 绑定属性或方法,即使绑定了也没有任何作用,因为通过上面源码中 React 对函数组件的调用,是采用直接执行函数的方式,而不是通过new的方式。
函数组件和类组件本质的区别是什么呢?
对于类组件来说,底层只需要实例化一次,实例中保存了组件的 state 等状态。对于每一次更新只需要调用 render 方法以及对应的生命周期就可以了。但是在函数组件中,每一次更新都是一次新的函数执行,一次函数组件的更新,里面的变量会重新声明。
为了能让函数组件可以保存一些状态,执行一些副作用钩子,React Hooks 应运而生,它可以帮助记录 React 中组件的状态,处理一些额外的副作用。
3.3 组件的通信方式
React 一共有5种主流的通信方式:
- props 和 callback 方式
- ref方式
- React-redux 或 React-mobx 状态管理方式
- context上下文
- eventBus事件总线
主要讲一下第一种和5种
1. props 和 callback 方式
未完待续。。。