Пора сделать еще один шаг к хукам и изучить useReducer, useRef, useContext и useMemo.
Да, эта статья основана на хуках Advance, поэтому я предполагаю, что вы знакомы с хуками и знакомы с использованием таких базовых хуков, как useState и useEffect. Так что, если вы не знаете о хуках, вы можете поискать это в официальной документации React. Но я буду любезен😉 и кратко расскажу о крючках.
Крючки ??? 🤨
Хуки - это последние функции, выпущенные в React версии 16.8.0. При разработке приложений React мы использовали классы для создания компонента с отслеживанием состояния, но вся эта концепция скоро изменится. Хуки вот-вот произведут революцию в том, как должен быть написан код React. Раньше мы не могли использовать состояние в функциональных компонентах, но теперь с помощью хуков мы можем подключить состояние, методы жизненного цикла и другие функции на основе классов к функциональным компоненты. С точки зрения непрофессионала, крючки превращают ваши функциональные компоненты в стероиды.
Узнайте больше о хуках React:
Значит ... уроки не работают ??
Неа, хуки - это совершенно новый API, он не влияет на ваши предыдущие знания. Если вам не нравятся хуки (в чем я очень сомневаюсь), вы все равно можете использовать компоненты на основе классов, как раньше.
Что не так с компонентами на основе классов? 😒
Не знаю, как вы, но я ненавижу привязывать this каждый раз, когда я создаю функцию. это до сих пор не дает мне покоя. Нет ничего плохого, но зачем использовать то, что сбивает вас с толку, если вы можете использовать что-то, что легче понять.
Функции легче понять, чем классы (в этом нет споров).
Если вы не знаете о хуках useState и useEffect, просто нажмите здесь.
Извините за задержку, давайте перейдем к не так много разговоров о крючках.
Полезный совет: Bit помогает вашей команде совместно работать над общими компонентами. Каждый компонент можно независимо разрабатывать, тестировать и использовать в ваших приложениях. Bit обрабатывает весь жизненный цикл каждого общего компонента, поэтому вы можете сосредоточиться на создании отличных приложений.
крючок useReducer ❤
Это мой любимый крючок. Если вы являетесь частью мира redux, вы должны знать, что такое редуктор. А если нет, не волнуйтесь, потому что ...
Редуктор - это функция, которая принимает два аргумента и возвращает один.
Редуктор - это функция, которая принимает 2 аргумента (состояние и действие) и возвращает новое состояние в зависимости от типа действия.
Помните функцию уменьшить? Да, концепция такая же, как и у хуков useReducer.
Выше представлена функция ES6 reduce. Следует обратить внимание на то, что метод reduce принимает два аргумента, функцию и начальное значение и возвращает одно значение. То же, что и хук useReducer. Он принимает два аргумента: первый - это функция редуктора (возвращает новое состояние), а второй - начальное состояние.
Мы можем разложить этот хук на две части.
- новое состояние
- способ отправки
newState - это обновленное состояние, в то время как метод отправки используется для отправки действий (отправки действий в функцию редуктора). Обновления состояния выполняются при запуске действия. Итак, когда происходит событие, метод диспетчеризации отправляет действие функции редуктора, и на основе действия обновляется состояние.
Действие - это объект javascript, у которого есть свойство type и свойство payload.
Таким образом, поток будет примерно таким: -
Происходит событие - ›Действие отправки с использованием метода отправки -› Редуктор обновляет состояние в зависимости от «типа» действия
Ниже приведен фрагмент кода для простого компонента Counter.
Начальное значение счетчика равно 0, и редуктор возвращает обновленное состояние в соответствии с типом действия. Если тип действия - «добавить», увеличьте состояние на единицу, если тип «вычесть» возвращает состояние минус один.
Итак ... вышеупомянутый поток работает следующим образом -
Событие происходит (здесь нажатие кнопки) = ›действие отправляется с использованием метода отправки =› в зависимости от типа действия, редуктор выполняет свою работу.
Ниже представлена демонстрация CodeSandBox для приложения Counter.
крючок useRef
Ссылки используются для доступа к элементам DOM или React, отображаемым в функции рендеринга. И стандартный способ использования ссылок в предыдущих версиях React был примерно таким:
А чтобы иметь доступ к текущему узлу -
const node = this.myRef.current;
Теперь посмотрим, как работает хук useRef:
У нас есть доступ к тегу input. Намного проще, чем раньше 😎 .
useContext 🔥
Контекст решает одну из самых больших проблем React - бурение опор. Render props был предложенным методом, необходимым для использования контекста, что не является изящным способом сделать это.
Ловушка useContext обеспечивает более чистый и оптимизированный способ использования контекста.
Одна проблема со старым способом заключалась в том, что было много вложений. Если бы у нас было больше родительских контекстов, использование этих контекстов могло бы быть чертовски беспорядочным.
Видите ли, сложное вложение для получения всего двух значений. Посмотрим, как устроен крючок
крючок useMemo
В React есть ловушка useMemo, которая в основном позволяет нам запоминать сложные и дорогостоящие функции, чтобы мы могли избежать их вызова при каждом рендеринге ...
Ух ... воу ... погоди ... погоди ... memoize ?? .. Что это? 😕
Ах, моя беда. С точки зрения непрофессионала, memoize означает избегать выполнения одной и той же задачи (или выполнения одной и той же функции) для одних и тех же значений (тех же параметров). Я приведу пример, который я взял из выступления одного из моих коллег. (Я очень рекомендую вам посмотреть его слайды здесь)
Скажем, мы должны написать функцию, чтобы найти квадрат заданного числа. Это легко -
Видите, мы дважды вычислили квадрат 16. Ничего страшного, потому что это не интенсивная операция, если бы это было что-то дорогое, нам пришлось бы запомнить это.
Итак .. Как это запомнить ??
Мы могли бы создать мини-кеш и хранить в нем ранее вычисленные значения. И в следующий раз нам не нужно вычислять квадрат 16. Вместо этого мы можем выбрать значение из мини-кеша. Вот как -
Имеет смысл, но каковы его варианты использования в React ?? 🙄🙄
В React мы не хотим повторно отображать компонент, даже если его свойства такие же. Итак, мы должны запоминать соответствующий компонент с помощью хука useMemo, чтобы компонент повторно отображался только при изменении свойств.
Круто, useMemo принимает два параметра, функцию обратного вызова и массив входных данных.
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
useMemo будет пересчитывать мемоизированное значение только тогда, когда один из входов изменился. Таким образом, оптимизация производительности.
Заключение
В этой статье мы узнали о некоторых интересных вещах, связанных с React Hooks. Хотя есть гораздо больше концепций допинга, о которых я расскажу в своих следующих статьях. Надеюсь, вам понравилась эта статья. Не стесняйтесь комментировать и спрашивать. Спасибо за чтение 🙏 💖