В начале этого года команда RACT выпустила новое дополнение, крючки, чтобы реагировать в версии 16.8.0.
Если отреагировали большую миску конфет, то крючки являются последними дополнениями, очень жевательные конфеты с большим вкусом!
Итак, что именно значит крюки? И почему они стоят вашего времени?
Вступление
Одной из основных причин были добавлены крючки для реагирования, заключается в предложении более мощного и выразительного способа записи (и обмена) функциональности между компонентами.
Если крючки будут такими важными, почему бы не узнать о них в интересах!
Конфета чаша
Рассмотрим реагировать на прекрасную миску конфет.
Чаша конфеты была невероятно полезной для людей по всему миру.
Люди, которые сделали эту миску конфету, поняли, что некоторые Из конфет в миску не делали людей намного хорошего.
Пара конфет вкусных, да! Но они привели к некоторой сложности, когда люди съели их – думают, что рендеры реквизиты и компоненты высшего порядка?
Итак, что они сделали?
Они сделали правильные вещи – не выбрасывающие все предыдущие конфеты, но делая новые наборы конфет.
Эти конфеты назывались Крючки Отказ
Эти конфеты существуют за одну цель: Чтобы вы проще сделать то, что вы уже делали Отказ
Эти конфеты не являются специальными. На самом деле, как вы начинаете есть их, вы поймете, что вкус знакомы – они просто Функции JavaScript Действительно
Как со всеми хорошими конфетами, эти 10 Все новые конфеты имеют свои уникальные имена. Хотя они коллективно называют крючки .
Их имена всегда начинаются с трех букв Word, Используйте … например Уместите , Useffect и т.п.
Так же, как шоколад, эти 10 конфет все разделяют некоторые из тех же ингредиентов. Знание того, как по одному вкусу помогает вам относиться к другому.
Звучит весело? Теперь давайте будем эти конфеты.
Государственный крючок
Как заявлено ранее, крючки являются функциями. Официально, есть 10 из них. 10 Новых функций, которые существуют, чтобы сделать запись и совместное использование функций в ваших компонентах, намного более выразительны.
Первый крюк, который мы посмотрим, называется, Уместите Отказ
Долгое время вы не можете использовать локальное состояние в функциональном компоненте. Ну, не до крючка.
С Уместите Ваш функциональный компонент может иметь (и обновлять) локальное состояние.
Как интересно.
Рассмотрим следующее счетное применение:
С Счетчик Компонент показан ниже:
Просто, а?
Позвольте мне задать вам один простой вопрос. Почему именно у нас есть этот компонент в качестве компонента класса?
Ну, ответ просто потому, что нам нужно отслеживать какое-то локальное состояние в компоненте.
Теперь вот тот же компонент, повторный для функционального компонента с доступом к состоянию через Уместите Крючки.
Что отличается?
Я пойду на тебя через это шаг за шагом.
Функциональный компонент не имеет всех Класс расширяется ... синтаксис.
function CounterHooks() { }Это также не требует оказывать метод.
function CounterHooks() { return ( Welcome to the Counter of Life
); }Есть два опасения с кодом выше.
- Вы не должны использовать
ЭтоКлючевое слово в функциональных компонентах. -
СчитатьГосударственная переменная не была определена.
Экстракт Handleclick до отдельной функции в функциональном компонент:
function CounterHooks() { const handleClick = () => { } return ( Welcome to the Counter of Life
); }Перед рефактором Считать Переменная пришла из государственного объекта классов компонента.
В функциональных компонентах, а также с крючками, что приходит отзыв Уместите функция или крючок.
Уместите вызывается с одним аргументом, начальным значением состояния E.g. Уместите (0) где 0 Представляет исходное состояние состояния, которое следует следовать.
Призывая эту функцию возвращает массив с двумя значениями.
//? returns an array with 2 values. useState(0)
Первое значение, являющееся текущим значением состояния, которая отслеживается, а вторая функция для обновления значения состояния.
Думать об этом как и некоторые Государство и SetState Реплика – однако они не совсем одинаковы.
С этими новыми знаниями, вот Уместите в действии.
function CounterHooks() { // ? const [count, setCount] = useState(0); const handleClick = () => { setCount(count + 1) } return ( Welcome to the Counter of Life
); } Здесь есть несколько вещей, кроме очевидной простоты кода!
Один, так как вызов Уместите Возвращает массив значений, значения могут быть легко разрушены на отдельные значения, как показано ниже:
const [count, setCount] = useState(0);
Кроме того, обратите внимание, как Handleclick Функция в рефакторенном коде не требуется ссылки на Превзойти или что-нибудь подобное.
Это просто звонит SetCount С новой ценностью Count + 1 Отказ
const handleClick = () => { setCount(count + 1) }Это из-за правильного значения Считать Государственная переменная всегда будет зависеть от рендеров.
Итак, надо обновлять переменную счетчика, просто позвоните SetCount с новой ценностью E.g. setcount (count + 1)
Простое как это звучит, вы построили свой первый компонент, используя крюки. Я знаю, что это надуманный пример, но это хороший старт!
NB Также возможно пройти функцию в функцию Государственной обновления. Это обычно рекомендуется как с классом ‘ SetState Когда государственное обновление зависит от предыдущего значения государства например setcount (prevcount => prevcount + 1)
Несколько звонков на участие
С классовыми компонентами мы все привыкли устанавливать значения состояния в объекте, содержат они одно имущество или более.
// single property state = { count: 0}// multiple properties state = { count: 0, time: '07:00'}С Уместите Возможно, вы заметили тонкое значение.
В приведенном выше примере мы называем только Уместите с фактическим начальным значением. Не объект для удержания значения.
useState(0)
Итак, что если мы хотим к другой государственной ценности?
Может несколько Уместите Будьте использованы звонки?
Рассмотрим компонент ниже. Так же, как раньше Но на этот раз он отслеживает время клика.
Как видите, использование крючков довольно то же самое, за исключением нового Уместите вызов.
const [time, setTime] = useState(new Date())
Сейчас время используется в визуализированном JSX Чтобы получить час, минуту и секунду клика.
at: { `${time.getHours()} : ${time.getMinutes()} : ${time.getSeconds()}`}
Большой!
Тем не менее, возможно ли использовать объект с Уместите в отличие от нескольких Уместите Звонки?
Абсолютно!
Если вы решите сделать это, вы должны отметить, что в отличие от SetState Звонки, значения передаются в Уместите заменяет значение состояния. SetState объединяет свойства объекта, но Уместите заменяет все значение.
Эффект крюк
С компонентами класса, которые вы, вероятно, выполняли побочные эффекты, такие как регистрация, получение данных или управление подписку.
Эти побочные эффекты могут быть называться «эффектами» для коротких, а эффективный крюк, Useffect был создан для этой цели.
Как это используется?
Ну, Useffect
Вот быстрый пример.
useEffect(() => { // ? you can perform side effects here console.log("useEffect first timer here.")}) К useffect. Я передал анонимную функцию с некотором побочным эффектом, вызванным внутри него.
Следующий логический вопрос в том, когда Useffect Функция вызывается?
Ну, помните, что в класс компонентах у вас были методы жизненного цикла, такие как ComponentDidmount. и ComponentDidupdate Отказ
Поскольку функциональные компоненты не имеют этих методов жизненного цикла, Useffect вроде берет свое место.
Таким образом, в приведенном выше примере функция внутри Useffect Также известен как функция эффекта, будет вызываться при установке функциональных компонентов ( ComponentDidmount ) и когда компонент обновляется ComponentDidupdate ).
Вот что в действии.
Добавляя Useffect Вызов выше к приложению Counce, вот поведение, которое мы получаем.
NB : Useffect крючок не совсем так же, как ComponentDidmount. + ComponentDidupdate Отказ Это можно рассматривать как таковое, но реализация отличается некоторыми тонкими различиями.
Интересно, что функция эффекта была вызвана каждый раз, когда было обновление. Это здорово, но это не всегда желаемая функциональность.
Что, если вы хотите только запустить функцию эффекта только при установке компонентов?
Это общий случай для использования и Useffect Получает второй параметр, массив зависимостей для обработки этого.
Если вы проходите в пустой массиве, эффектная функция выполняется только на мозе – последующие повторные рендеры не запускают функцию эффекта.
useEffect(() => { console.log("useEffect first timer here.")}, []) Если вы передаете какие-либо значения в этот массив, то функция эффекта будет запущена на мозе, и в любое время обновленные значения обновлены. I.e Если какая-либо из значений изменяется, производимый вызов будет запускаться.
useEffect(() => { console.log("useEffect first timer here.")}, [count]) Функция эффекта будет запущена на мозе, и всякий раз, когда изменяется функция подсчета.
Как насчет подписок?
Обычно следует подписаться и отписаться от определенных эффектов в определенных приложениях.
Рассмотрим следующее:
useEffect(() => { const clicked = () => console.log('window clicked'); window.addEventListener('click', clicked);}, [])При приведенном выше эффекте при монтаже прослушиватель событий Click прикреплен к окну.
Как мы отписываемся от этого слушателя, когда компонент отключен?
Ну, Useffect позволяет этому.
Если вы вернете функцию в рамках функции вашего эффекта, она будет вызываться, когда компонент размонтирует. Это идеальное место для отмены подписок, как показано ниже:
useEffect(() => { const clicked = () => console.log('window clicked'); window.addEventListener('click', clicked); return () => { window.removeEventListener('click', clicked) } }, [])Вы можете сделать намного больше с Useffect Крюк, такой как создание вызовов API.
Построить свои собственные крючки
С начала этой статьи мы взяли (и использованные) конфеты из конфеты React React.
Однако реагирование также дает возможность сделать ваши собственные уникальные конфеты – называемые пользовательскими крючками.
Итак, как это работает?
Пользовательский крючок – это просто обычная функция. Однако его имя должно начинаться со слова, использовать И если необходимо, это может вызвать любой из реагированных крючков внутри себя.
Ниже пример:
Правила крючков
Есть два правила, чтобы придерживаться при использовании крючков.
- Только вызовите крючки на Верхний уровень I.E. не в пределах условных петель или вложенных функций.
- Только вызов крючков из функций joad I.e. Функциональные компоненты и пользовательские крючки.
Этот эсцентр плагин Здорово убедиться, что вы придерживаетесь этих правил в ваших проектах.
Другие конфеты
Мы рассмотрели несколько реакций крючков, но есть все больше!
Это введение должно подготовить вас, чтобы взять на себя, возможно, более плотнее Документация Отказ Также оформируйте оформление моего живого редактируемого реагирования Крючки Chechsheet Отказ
Оригинал: “https://www.freecodecamp.org/news/learn-the-basics-of-react-hooks-in-10-minutes-b2898287fe5d/”