Hooks
-
аналогия
ClassComponent
Hooks
время исполнения -
Постепенно привыкнув к этому, я обнаружил, что
Hooks
время выполнения и生命周期
又有些不同。 НапримерcomponentWillReceiveProps
Который соответствуетHooks
? -
Запутался, иди поищи
Hooks
Чтение статьи на базовом уровне
какAPI
, неужели нельзя просто и мило называть по документу,Hooks
Почему это так сложно?
React
Чиновник также нашел эту проблему,React Переписать документациюсказал,React
основываться наHooks
Переписать документацию.
Эта статья в основном включает два аспекта:
-
объяснять
Hooks
Причина, по которой трудно учиться -
дать обучение
Hooks
предложение
Базовая архитектура React
Его можно обобщить формулойReact
:
const UI = fn(state);
视图
можно рассматривать как状态
проходить через函数
отображение.
Взаимодействие пользователя с интерфейсом можно рассматривать как постоянную реализацию этой формулы.
Эта формула слишком коротка, нет объясненияstate
Откуда (штат) приходит, давайте расширимся:
const state = reconcile(update);
const UI = fn(state);
-
взаимодействие с пользователем
update
(продлить) -
update
проходить черезreconcile
шаги для расчета текущего приложенияstate
-
fn
Будуstate
Сопоставлено с просмотром изменений (пользовательский интерфейс)
мы даемfn
Имя:commit
:
const state = reconcile(update);
const UI = commit(state);
Такupdate
Где оно возникает? Конечно, от взаимодействия с пользователем, например: события кликов.
такReact
Базовая архитектура может быть упрощена до трех шагов:
-
взаимодействие с пользователем
update
-
state
= reconcile(update
); -
UI
= commit(state
);
ClassComponent
УчитьHooks
Уровень абстракции для функций жизненного цикла
У нас уже есть полная базовая архитектура, которая управляет обновлениями представлений. Как разработчикам следует использовать эту архитектуру?
Можно провести аналогию с уровнем абстракции компьютера:
高层:应用程序
中层:操作系统
底层:计算机组成架构
вести перепискуReact
:
高层:应用程序 ClassComponent生命周期
中层:操作系统 介入架构的API
底层:计算机组成架构 React底层架构
можно увидеть,生命周期函数
Он относится к более высокому уровню абстракции. Это также разработано, чтобы облегчить разработчикам начало работы.React
.
представьте себеVue2
Разработчик собираетсяReact
Стек технологий, просто нужна аналогияVue
жизненный цикл, чтобы учитьсяReact
жизненный цикл.
все это вHooks
Однако никаких проблем до прибытия...
Крючки уровней абстракции
Hooks
Относится к среднему уровню абстракции. То есть,Hooks
Непосредственное вмешательство в текущий процесс базовой архитектуры.
高层:应用程序
中层:操作系统 Hooks
底层:计算机组成架构 React底层架构
когда мы используем生命周期函数
сравниватьHooks
, на самом деле используя高抽象层级
вещи для описания低抽象层级
вещи.
Животное --> Млекопитающее --> Крупный рогатый скот --> Корова
Ибо человек видел только корову, других животных никогда не видел, как ему объяснить哺乳动物
Что это такое?
Именно из-за асимметричного уровня абстракции, по причине生命周期函数
Обучение по аналогииHooks
столкнется с проблемами.
Как выучить хуки
теперь, когдаHooks
-
взаимодействие с пользователем
update
-
state
= reconcile(update
); -
UI
= commit(state
);
Формула управления, давайте объясним несколько общихhook
useState
Например:
function App() {
const [state, updateState] = useState(0);
return <div onClick={() => updateState(state + 1)}></div>;
}
useState
-
законсервированный
state
-
Изменять
state
МетодыupdateState
Формула контраста,state
Он принадлежит формуле, рассчитанной на шаге 2:
- state = reconcile(update);
На данный момент вид не обновлен.
пользовательские кликиdiv
вызыватьupdateState
, что соответствует шагу 1 формулы:
- взаимодействие с пользователем
update
так позвониupdateState
когдаreconcile
Рассчитатьstate
-
UI
= commit(state
);
useEffect
Например:
useEffect(doSomething, [xx, yy])
useEffect
doSomething
Вызывается асинхронно после завершения третьего шага:
-
UI
= commit(state
);
так вdoSomething
Представление можно получить внутри функции для завершения обновленного представления.
второй параметр[xx, yy]
как зависимость, решилdoSomething
будет называться.
useLayoutEffect
отличный отuseEffect
Вызывается асинхронно после выполнения третьего шага,useLayoutEffect
будет выполнен на третьем шагеUI
Выполняется синхронно после операции.
useRef
useState
а такжеuseEffect
那么这三个步骤如何交流呢? пройти черезuseRef
.
useState
useLayoutEffect
для третьего шага,useEffect
После завершения третьего шага.
использоватьuseRef
, вы можете достичь цели обмена данными ссылочного типа между различными шагами.
можно увидеть,React
Соответствие каждому шагу трехэтапного рабочего процесса базовой архитектурыhook
, обеспечивая тандем этих трехэтапных рабочих процессовhook
.
Разработчикам нужно только пройти базовыйHooks
собранный自定义hook
, логика может выполняться на различных этапах процесса выполнения базовой архитектуры.
Обучение снизу вверх ставит телегу впереди лошади?
Некоторые одноклассники опровергнут: учись преждеReact
нужно учиться生命周期函数
Сроки исполнения, узнайте сейчасHooks
нужно учиться底层架构运行流程
. Разве это не ставит телегу впереди лошади и не усложняет задачу?
вообще-то нет. Я задам вам несколько вопросов:
-
componentWillReceiveProps
Почему он отмечен какunsafe
? -
getDerivedStateFromProps
Вы использовали его? -
this.setState
Синхронный или асинхронный?
И生命周期函数
Сопутствующие вопросы совсем не простые! Многие пользовались несколько летReact
Передняя часть не обязательно отвечает вышеизложенному.
Как высокий уровень абстракции,生命周期函数
隐藏了太多实现细节。 в то же времяReact
Слишком гибкий, не нравитсяVue
пройти через模版语言
Действия разработчика ограничены.
Результат: другойReact
Разработчики пишут всякую чушьClassComponent
.
В отличие от底层架构运行流程
УчитьHooks
:
-
底层架构运行流程
то естьReact
Абсолютная истина, не скрывающая большей абстракции -
Hooks
Спецификация написания ограничивает замечательные операции разработчика
Единственная проблема здесь - отсутствие копии с底层
Документы отправления. Это тожеReact
React
Демистификация технологии ReactУчить.
Здесь есть и другие точки зрения.Hooks
статья:
-
от
理念
Уровень:Алгебраические эффекты и хуки -
от
微观
(код) уровень:Реализация исходного кода всех распространенных хуков