From 7840f947f8e0bd01626a5274f9f30babd4e1fe79 Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Wed, 5 Oct 2022 01:34:11 +0800
Subject: [PATCH] doc: Update `react.md` cheatsheet.
---
docs/react.md | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 264 insertions(+)
diff --git a/docs/react.md b/docs/react.md
index b3c49ea..0411d12 100644
--- a/docs/react.md
+++ b/docs/react.md
@@ -381,6 +381,61 @@ function CustomTextInput(props) {
}
```
+### 严格模式 StrictMode
+
+```jsx
+
+```
+
+----
+
+- [识别不安全的生命周期](https://zh-hans.reactjs.org/docs/strict-mode.html#identifying-unsafe-lifecycles)
+- [关于使用过时字符串 ref API 的警告](https://zh-hans.reactjs.org/docs/strict-mode.html#warning-about-legacy-string-ref-api-usage)
+- [关于使用废弃的 findDOMNode 方法的警告](https://zh-hans.reactjs.org/docs/strict-mode.html#warning-about-deprecated-finddomnode-usage)
+- [检测意外的副作用](https://zh-hans.reactjs.org/docs/strict-mode.html#detecting-unexpected-side-effects)
+- [检测过时的 context API](https://zh-hans.reactjs.org/docs/strict-mode.html#detecting-legacy-context-api)
+- [确保可复用的状态](https://zh-hans.reactjs.org/docs/strict-mode.html#ensuring-reusable-state)
+
+突出显示应用程序中潜在问题的工具。请参阅:[严格模式](https://zh-hans.reactjs.org/docs/strict-mode.html)
+
+### Profiler
+
+
+测量一个 React 应用多久渲染一次以及渲染一次的 `代价`
+
+```jsx
+
+
+
+```
+
+为了分析 `Navigation` 组件和它的子代。应该在需要时才去使用它。
+
+:- | :-
+:- | :-
+`id(string)` | 发生提交的 `Profiler` 树的 `id`
+`onRender(function)` | 组件树任何组件 “提交” 一个更新的时候调用这个函数
+
+#### onRender 回调函数
+
+:- | :-
+:- | :-
+`phase: "mount" \| "update"` | 判断是由 `props`/`state`/`hooks` 改变 或 “第一次装载” 引起的重渲染
+`actualDuration: number` | 本次更新在渲染 Profiler 和它的子代上花费的时间
+`baseDuration: number` | 在 Profiler 树中最近一次每一个组件 render 的持续时间
+`startTime: number` | 本次更新中 React 开始渲染的时间戳
+`commitTime: number` | 本次更新中 React commit 阶段结束的时间戳
+`interactions: Set` | 当更新被制定时,“[interactions](https://fb.me/react-interaction-tracing)” 的集合会被追踪
+
默认值
---
@@ -844,6 +899,215 @@ Hooks
---
+PropTypes 属性类型检查
+---
+
+### PropTypes
+
+
+```jsx
+import PropTypes from 'prop-types'
+```
+
+----
+
+:- | -
+:- | -
+`any` | 任意类型
+`(props, propName, 组件名称)=>{}` | 自定义验证器
+
+#### 基础
+
+:- | -
+:- | -
+`string` | 字符串
+`number` | 数组
+`func` | 函数
+`bool` | 布尔值
+`symbol` | -
+
+#### 枚举 Enum
+
+:- | -
+:- | -
+`oneOf(any)` | 枚举类型
+`oneOfType([type])` | 几种类型中的任意一个类型
+
+
+#### 数组 Array
+
+:- | -
+:- | -
+`array` | 数组
+`arrayOf` | 数组由某一类型的元素组成
+
+#### 对象 Object
+
+:- | -
+:- | -
+`object` | 对象
+`objectOf` | 对象由某一类型的值组成
+`instanceOf(...)` | 类的实例
+`shape` | 对象由特定的类型值组成
+`exact` | 有额外属性警告
+
+#### 元素 Elements
+
+:- | -
+:- | -
+`element` | React 元素
+`elementType` | React 元素类型(即 `MyComponent`)
+`node` | DOM 节点
+
+#### 必需的
+
+:- | -
+:- | -
+`(···).isRequired` | 必需的
+
+请参阅:[使用 PropTypes 进行类型检查](https://zh-hans.reactjs.org/docs/typechecking-with-proptypes.html)
+
+### 基本类型
+
+```jsx
+MyComponent.propTypes = {
+ email: PropTypes.string,
+ seats: PropTypes.number,
+ callback: PropTypes.func,
+ isClosed: PropTypes.bool,
+ any: PropTypes.any
+ symbol: PropTypes.symbol,
+}
+```
+
+你可以将属性声明为 JS 原生类型,默认都是可选的。
+
+### 必需的
+
+```jsx
+MyComponent.propTypes = {
+ // 确保这个 prop 没有被提供时,会打印警告信息
+ requiredFunc: PropTypes.func.isRequired,
+
+ // 任意类型的必需数据
+ requiredAny: PropTypes.any.isRequired,
+}
+```
+
+你可以在任何 `PropTypes` 属性后面加上 `isRequired`。
+
+### 枚举
+
+```js
+MyComponent.propTypes = {
+ // 只能是特定的值,枚举类型。
+ optionalEnum: PropTypes.oneOf([
+ 'News', 'Photos'
+ ]),
+ // 一个对象可以是几种类型中的任意一个类型
+ optionalUnion: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.instanceOf(Message)
+ ]),
+}
+```
+
+### 元素 Elements
+
+```jsx
+MyComponent.propTypes = {
+ // 任何可被渲染的元素
+ // (包括数字、字符串、元素或数组)
+ // (或 Fragment) 也包含这些类型。
+ node: PropTypes.node,
+
+ // 一个 React 元素。
+ element: PropTypes.element,
+
+ // 一个 React 元素类型(即,MyComponent)
+ elementType: PropTypes.elementType,
+}
+```
+
+### 对象 Object
+
+```jsx
+MyComponent.propTypes = {
+ // 可以指定一个对象由某一类型的值组成
+ objectOf: PropTypes.objectOf(
+ PropTypes.number
+ ),
+ // 可以指定一个对象由特定的类型值组成
+ objectWithShape: PropTypes.shape({
+ color: PropTypes.string,
+ fontSize: PropTypes.number
+ }),
+ // 带有额外属性警告的对象
+ objectWithStrictShape: PropTypes.exact({
+ name: PropTypes.string,
+ quantity: PropTypes.number
+ }),
+}
+```
+
+### 自定义验证器
+
+```jsx
+MyComponent.propTypes = {
+ custom: (props, propName, compName) => {
+ if (!/matchm/.test(props[propName])) {
+ // 它在验证失败时应返回一个 Error 对象
+ return new Error(
+ '无效的prop `'
+ ` \`${propName}\` 提供给` +
+ ` \`${compName}\`。验证失败。`
+ );
+
+ }
+ },
+}
+```
+
+请不要使用 `console.warn` 或抛出异常,因为这在 `oneOfType` 中不会起作用。
+
+### 自定义的 `arrayOf` 或 `objectOf` 验证器
+
+
+```jsx
+MyComponent.propTypes = {
+ arrayProp: PropTypes.arrayOf((propValue, key, componentName, location, propFullName) => {
+ if (!/matchme/.test(propValue[key])) {
+ // 它应该在验证失败时返回一个 Error 对象。
+ return new Error(
+ 'Invalid prop `' + propFullName + '` supplied to' +
+ ' `' + componentName + '`. Validation failed.'
+ );
+ }
+ })
+}
+```
+
+`propValue` 是数组或对象本身,`key` 是他们当前的键。
+
+### 数组
+
+```jsx
+MyComponent.propTypes = {
+ arr: PropTypes.arrayOf(PropTypes.number),
+};
+```
+
+可以指定一个数组由某一类型的元素组成
+
+### 验证类的实例
+
+```jsx
+MyComponent.propTypes = {
+ message: PropTypes.instanceOf(Message),
+};
+```
+
另见
----