На третий день челленджа 100 Days of Coding я заканчиваю изучение React Hooks созданием собственного хука. Пользовательский хук позволяет вам создать модульный компонент, который вы можете повторно использовать так же, как используются хуки useState и use Effect. Мне удалось найти отличный учебник от программиста Джеймса Кинга, который отлично объяснил, как создать модальное окно с помощью пользовательского хука. Вы можете проверить это по этой ссылке, если хотите получить полное объяснение:
https://upmostly.com/tutorials/modal-components-react-custom-hooks

Короче говоря, необходимо создать два компонента, чтобы этот модальный пользовательский хук работал. Сначала я создал сам хук со следующим кодом:

import { useState } from ‘react’;
const useModal = () => {
     const [isShowing, setIsShowing] = useState(false);
     function toggle() {
          setIsShowing(!isShowing)
     }
     return {
          isShowing,
          toggle
     }
};
export default useModal;

Этот пользовательский хук использует useState для включения или выключения модального окна. Поскольку этот компонент является модальным, вы можете использовать его с любым модальным окном, которое есть на вашем сайте. Это, безусловно, гораздо более простой способ создания модальных окон, чем все, с чем я сталкивался до сих пор.

Затем мне нужно было создать сам модальный компонент, который будет отображаться при нажатии определенной кнопки. Наконец, мне нужно было подключить эти компоненты к предыдущему компоненту счетчика, над которым я работал последние пару дней. Следующий код использует пользовательский хук для настройки:

const {isShowing, toggle} = useModal();

Этот код вызывает модальный компонент и использует настраиваемый хук для активации модального окна.

<Modal
     isShowing={isShowing}
     hide={toggle}
/>

Все, что осталось сделать, это стилизовать модальный компонент так, чтобы он работал как модальный.

Благодаря этому замечательному руководству Джеймса Кинга я также смог понять, как использовать React.Fragment, а также ReactDOM.createPortal. Они обязательно пригодятся при работе с Хуками в будущем.

Я считаю, что это завершит мое исследование React Hooks на данный момент. Я чувствую, что теперь хорошо понимаю, как их использовать, и готов двигаться дальше. Если вы хотите проверить код, который я создал во время этого небольшого исследования, вы можете посетить этот репозиторий, в котором содержится гораздо больше информации:

https://github.com/wchrapcynski/hooks-practice