По умолчанию читатели этой статьи уже имеют определенное представление о React Hooks. Поэтому я не буду повторять использование Hooks API, студенты, которые еще не разобрались, могут зайти на официальный сайт почитать.React Hooks API Reference
Основы хуков React
Компоненты функции React должны быть упомянуты при использовании React Hooks.
Концептуально компоненты похожи на функции JavaScript: они принимают произвольные входные данные (называемые «реквизитами») и возвращают элементы React, описывающие, что должно появиться на экране.
Из введения на официальном сайте компонент похож на функцию JavaScript, он получает некоторые входные параметры (реквизиты) и возвращает элемент React.
Когда мы впервые научились использовать фреймворк React, первое, чему мы научились, это черезClass
Напишите компоненты, чтобы их можно было хорошо понять и спланировать类组件
данные и методы, а также生命周期
Это может дать нам более четкое представление о том, когда компонент загружается и когда запускается обновленное состояние.
Это函数组件
Шерстяная ткань?函数组件
сам решает сопоставление данных с элементами React, аHooks
На этой основе обеспечивается хранение данных и обработка Side Effect.
В этот момент давайте забудем то, что мы уже знаемClass
а также生命周期
, открыть заново函数组件
+ Hooks
Реагировать.
0. Функциональные компоненты
函数组件
Он используется для обработки некоторых простых компонентов пользовательского интерфейса и абстрактной инкапсуляции некоторых компонентов с помощью данных, передаваемых через реквизиты.
function Header(props) {
const { title, description, avatar } = props;
return (
<div>
<img src={avatar} />
<h1>{title}</h1>
<p>{description}</p>
</div>
);
}
Причина ограничения использования функциональных компонентов заключается в том, что, с одной стороны, у них нет внутренних данных, а с другой стороны, у них нет жизненного цикла, поэтому они не могут реализовывать функции с определенным взаимодействием и логикой.
1. Хранение данных при использовании React Hooks
Переменные, определенные в функциональном компоненте, не затвердевают.После завершения выполнения переменные в функции будут очищены (незамкнутый случай). Итак, нам нужно закрепить некоторые данные, необходимые компоненту, через хуки.
Вышеприведенный пример useState хуков React Ниже приведено простое понимание:
пройти через
useState
, мы определяем объект где-то и монтируем его где-то, чтобы он не исчез.useState
Первое значение, возвращаемое методом, — это данные, которые нам нужны.useState
Второе значение, возвращаемое методом, — это функция, которая может установить значение этого объекта, что затем вызовет повторную визуализацию функции.
Вышеупомянутое утверждение очень расплывчато,某个地方
Где это, что определяет对象
И где он установлен. Как вы запускаете рендеринг после установки нового значения???
в пониманииHook
Перед загрузкой вам все равно нужно понять определение и хранение Hook.
НижеHook
определение типа
export type Hook = {
// 数据
memoizedState: any,
// 下面这些暂时不需要了解
baseState: any,
baseQueue: Update<any, any> | null,
queue: UpdateQueue<any, any> | null,
// 链表下一个节点的指针
next: Hook | null,
};
Что нам нужно знать, так этоHook
через链表
хранится
- Когда функциональный компонент выполняется в первый раз
Первый крюк будет установлен наReact Fiber Node
После этого хуки, встречающиеся при выполнении функции, будут последовательно монтироваться на узлы хуков.
- Когда компонент функции обновляется и отображается
Крючки, которые выполняется функция, будет прочитана в порядкеReact Fiber Node
Зацепите узел на .
Как показано на рисунке выше, повторное выполнение функционального компонента зависит от порядка очереди хуков. если в条件判断
Использование Hook в этой очереди испортит эту очередь.
Поэтому будут следующие подсказки официального сайта:
Вызывайте хуки только на верхнем уровне. Не вызывайте хуки внутри циклов, условий или вложенных функций.
2. Обработка побочных эффектов с помощью React Hooks
Побочный эффект, личное понимание, в数据->视图
В процессе преобразования некоторые специальные时机
. мы можем использовать эти时机
для обработки некоторой бизнес-логики.
Используется следующееuseEffect
Простая подсчетная демонстрация .
использоватьuseEffect
Чтобы реализовать некоторые вещи, которые будут обработаны после завершения рендеринга.
Вы также можете найти описание React useEffect в Справочнике по API на официальном сайте.
Мы можем углубить наше понимание с помощью блок-схемuseEffect
Этот крючок.
ВышеuseEffect
Общую логику выполнения хука вы найдете на этом рисунке.useEffect
Еще один шаг数据比对
процесса, SideEffect инициирует вызов только при выполнении следующих условий.
- Когда useEffect выполняется в первый раз
- При изменении зависимостей useEffect
Мы можем лучше понять два хука, изменив приведенный выше пример подсчета.
function Demo(props) {
const [count, setCount] = useState(0);
const [step, setStep] = useState(1);
useEffect(() => {
const timer = setTimeout(() => {
setCount(step + count);
}, 1000)
return () => {
clearTimeout(timer);
}
}, [count]);
return (
<div>
<div>Count: {count}</div>
<div>Step: {step}</div>
<button
onClick={() => {
setCount(count + 1);
}}
>
Click
</button>
</div>);
}
На графике Gif при обновлении шага Step счетчик все равно первый раз+1
Последующий+2
.
- существует
step
При обновленииuseEffect
изcount
Без изменений, поэтому обновление не запускалось -
useEffect
При срабатывании используются данные, временно хранящиеся в хуке, поэтому размер шагаstep
еще 1.
Мы дополняем процесс сравнения в процессе загрузки крюка.
Hook
Значение снимка после последнего рендеринга хранится в , поэтому при выполнении также будет использоваться значение, оставшееся от последнего рендеринга.
Здесь мы суммируем процесс рендеринга функциональных компонентов.
3. Резюме
В этой статье упоминается толькоuseState
, useEffect
Два примера типичных хуков React.
кuseState
Например, мы узналиReact Hooks
Как решить проблему невозможности сохранения внутренних данных в функциональном компоненте.
кuseEffect
Например, мы понимаемReact Hooks
как бороться с数据->视图
между некоторыми时机
обработка
и ясно сказаноHook
Причины промежуточного хранения данных (снимков) в
Есть много способов использовать React Hooks, эта глава предназначена только для того, чтобы разобраться с некоторыми основными концепциями React Hooks.
PS: следующая глава будет посвящена тому, «Как разобраться, реорганизовать и инкапсулировать свои собственные хуки в бизнесе».