Автор оригинала: FreeCodeCamp Community Member.
Сергея Ганноченько
React 16.7.0, наконец, выходит. У него нет крючков на борту, но рано или поздно будут реактивными крючками. Итак, сегодня у нас будет разговор, поэтому мы готовы использовать его сразу, когда пришло время?
Иногда, когда вы пишете свой компонент Pure Function, вы понимаете, что в какой-то момент вам нужно иметь своего рода флаг там, что указывает на то, что модаль открыт, счетчик увеличился или … что угодно. И тогда ваша вторая мысль – это: «О, мужчина, теперь мне нужно мигрировать, чтобы реагировать. Составная часть”. Ну, с крючками – не anymo-o-ore!
Я предполагаю, что у вас установлен узел следующих версий: 6.14.0, 8.10.0 или больше 9.10. Если нет, вы всегда можете использовать диспетчер версий узла для исправления этого. Имейте в виду, хотя, что нам придется установить все глобальные пакеты в случае, если мы переключаем версию узла.
Эта статья требует, чтобы у вас было как минимум базовые знания о реагировании, включая « компонент » и « Pure Function концепции», « Государство » и « Срок службы компонента » Отказ Но даже если вы не беспокоитесь, вы поймаете во время процесса, это будет весело!
Шаг 1: котельная
Откройте свой терминал, так как мы собираемся использовать сверхвелый генератор кода для приложений React Application, называемые Create-React-App :
npm install create-react-app -gcreate-react-app react-hooks
Теперь мы можем увидеть папку под названием ./react-hooks. Итак, мы идем туда и считаем это корнем нашего приложения.
Для того, чтобы на самом деле включить крючки, нам нужно перейти к списку версий реагирования на npmjs.com Отказ К тому времени, когда эта статья была написана, последняя версия с включенными крючками была 16.7,0-альфа.2. Так что давайте установим это. Нам также нужно установить пакет пары под названием React-Dom точно та же версия.
Так,
npm install react@16.7.0-alpha.2 --savenpm install react-dom@16.7.0-alpha.2 axios --save
Не забудьте начать приложение:
npm start
Шаг 2: umestate ()
Давайте найдем ./src/app.js Файл и повторно написать это так:
И это первый вид крючков, которые мы можем использовать: условный крючок, созданный с umestate (). В основном, Уместите () Принимает начальное значение некоторого значения и возвращает массив, где первый элемент представляет собой переменную с исходным значением, а вторая – это функция, которая позволяет нам изменять переменную. После того, как мы позвоним setcounter () Компонент повторно отобразится с обновленным значением счетчика.
Эквивалентный код без крючков будет:
Но с крючками код – это уборщик способа, и он даже не полагается на объектно-ориентированное программирование и это Заявления, которые иногда могут быть действительно загадочными для использования для не опытных разработчиков JavaScript.
Государство может быть сложным объектом, без проблем:
Но в соответствии с философией крючков, вместо этого лучше определить два значения состояния:
Это делает ваш код действительно легко понять.
Шаг 3: Useffect ()
В мире реагирования, а побочный эффект это действие, которое обычно выполняется на ComponentDIDMount (), ComponentDidupdate () и ComponentWillunmount () Методы жизненного цикла Реагировать. Компонент Отказ Но что, если мы все еще хотели бы иметь побочный эффект, но с чистой функцией? Конечно! Рассмотрим код:
Функция внутри Useffect () Призывается к первому визуализации и все последующие рендеры, что на самом деле не имеет никакого значения между этим, и если мы просто поставьте код внутри компонента напрямую.
Но ждать. Это не все!
Мы могли бы сделать некоторые оптимизации, сказав Useffect () Для работы только когда определенные значения изменились. Учти это:
Итак, Useffect () Будет воспоминать [Forbatman, forjoker] Значение и повторно запускают эффект, если что-то изменилось в этих аргументах.
Давайте рассмотрим больше случаев использования.
Случай A: Выполните код на ООН
Что если мы хотим поймать мгновение, когда компонент отключен? Все, что нам нужно сделать, это вернуть такую функцию:
«Подкомпонент размонтировал », появится в консоли, как только вы нажмете кнопку « One для приложения » 5 раз.
Сейс B: беги только на горе и на размонтилее
То, что мы могли бы также сделать, это заставить эффект работать только на монтируемом и включении, передавая пустой массив в качестве зависимости:
Это работает, потому что [] Остается то же самое в течение всего времени, когда компонент там, пока оно не отключается, независимо от того, что.
Случай C: загружать данные асинхронно на креплении и на обновлении
Последнее использование, которое я хотел бы продемонстрировать, это как сделать асинхронный эффект с некоторой нагрузкой на данные. Просто чтобы быть понятным, я не думаю, что имея логику для рендеринга данных и логики для загрузки данных в одном месте на самом деле является хорошей идеей. Основной принцип одной ответственности говорит нам, что должен быть чистый тупой рендеринг логики и чистой богатой бизнес-логики, поэтому я настоятельно рекомендую вам попробовать Redux + Сага . Но я думаю, это хорошая тема на некоторое время.
Есть два важных момента, чтобы заметить:
- Мы не можем использовать USEFFECT (ASYNC () = > {}) асинхронные эффекты не поддерживаются (все же), но мы все еще можем использовать там обещания, а также
- Мы не хотим, чтобы этот код запущен на каждом рендере, поэтому нам нужно определить второй аргумент для Useffect () в правильном пути. Мы всегда спрашиваем себя: «Что нужно изменить, чтобы повторно запустить эффект?». Хороший ответ – « Характер».
Шаг 4: USEREF () и USEMEMO ()
Если мы открываем исходный код Реагировать Мы могли видеть некоторые другие доступные крюки. Среди них УСЭРЕФ () Отказ Мы могли бы использовать его в сочетании с Useffect () сделать некоторые вещи. Рассмотрим код:
Что это делает, просто устанавливает значение поля ввода, а затем вызовов Фокус () Как только компонент установлен.
Еще один хороший – УСЭММО () Отказ Он в основном позволяет нам воменуть некоторую ценность в процессе рендеринга.
Почему? Хорошо, если нам нужно рассчитать что-то достаточно тяжелое (тяжелое при рендеринге, а?) Или сделать несколько удаленных звонков, но только когда некоторые определенные значения изменяются, мы могли бы использовать УСЭММО () штука Отказ Это все еще не так сильно, как традиционные способы воспоминания, так как его можно использовать только при рендеринге, но все же …
Шаг 5: Под капотом
Вы можете задаться вопросом, как эта функция даже работает? Я имею в виду, компоненты – это просто чистые функции, как переменные сохраняют свои скалярные значения между вызовами функций? Ну, например, Уместите () Возвращает массив, из которого мы используем первый аргумент как скаляр. Но этот массив может быть изменен внутри Реагировать Поэтому в следующий раз, когда двигатель рендеринга здесь, он уже знает, какие значения вставляют в эти скаляры.
Шаг 6: не
- Прежде всего, крючки все еще находятся в Alpha Stage, API может быть изменен в будущем, поэтому используйте его в производстве на свой собственный риск.
- Вы не можете использовать крючки вне функции компонента, это просто как они работают. Но вы можете сделать Композиция крючков Отказ
- Реагировать полагаться на количество и порядок о том, как крючки появляются в функции компонента. Итак, даже не думаю обертывания этих звонков с условной логикой каких-либо. Вместо этого вы можете поставить свой if-s внутри крючка.
- В настоящий момент крючки не работают на рендеринг на стороне сервера. Я надеюсь, что это будет исправлено в окончательном выпуске.
Заключение
Несмотря на то, что крючки недоступны официально, они определенно будут проще сделать нашу жизнь и очиститель кода. И всегда важно иметь понятный код, особенно при работе с реагированием.
Спасибо за прочтение! Если статья была полезна для вас, не стесняйтесь делиться этим в социальных сетях!:)
Экстрас
- Вот Доказательство репозитория концепции сделано для статьи
- Подумайте об чтении Официальные крючки ссылки на Facebook
Счастливого реагирования!
Оригинал: “https://www.freecodecamp.org/news/how-to-use-react-hooks-ef70894d9fd/”