kpodyganov
@kpodyganov
Увлекаюсь фронтенд-разработкой

Куда лучше поместить модалку?

Допустим, есть основной компонент модалки, и используется он в разных целях - для регистрации и авторизации. Приложение максимально удобно разбито на компоненты. Сама авторизация находится в шапке сайта и модалка там же находится, просто при нажатии на "регистрация" модалка появляется.

Что-то типа:
export function Header() {
  const [modal, setModal] = useState(false);
  return (<div>
    <button onClick={setModal}>Register</button>
    {modal && <Modal>{/* ... */}</Modal>}
  </div>);
}


Адекватен ли такой подход? Может есть вариант по лучше? Например, вызывать какой-то Event и в главном App компоненте слушать и если произошло то рендерить модалку. И где об этом почитать?
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 2
anatoly_kulikov
@anatoly_kulikov
Помог ответ? Отметь решением!
Поместить можно в цело куда угодно, все зависит от того, как удобнее с этим будет работать:
  • если в модалке один и тот же контент, то можно вынести куда-то в корень и управлять через некое общее состояние приложения (например, как справедливо отметили в комментариях, store)
  • если там контент может быть разный, то возможно есть смысл вызывать её в конкретном компоненте (как в вашем случае) или же так же определить глобально, но в этом случае нужно будет все пропсы передавать туда и события нужные оттуда же перехватывать, что в целом может усложнить код без какой-то надобности


В данном случае уместно будет также использовать порталы.
Ответ написан
Комментировать
Nolis
@Nolis
it-гопник
Один из вариантов:

Я думаю можно подготовить условный список всех вариации модалок в массиве.
const modals = [ { type: 'auth', button: 'Войти' (или массив) }, action: 'login', {....} ], подключить в одном месте.
управлять всем этим делом соответственно в одном слайсе.

У меня так в проекте была реализована модалка по отображению тех. ошибок.
Аксиос отдавал определенную ошибку, я искал её в списке возможных и показывал соответствующую модалку с соответствующими действиями.

Пример:
63dccd1fcef07908655538.png

Всё это дело можно расширять из одного места и как душе угодно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 06:09
30000 руб./за проект
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект