Передача внешних данных в существующий компонент React - PullRequest
2 голосов
/ 20 сентября 2019

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

Для этого я использую следующий шаблон:

  • defineотдельные компоненты в их собственном файле, например, Login.jsx
  • в index.jsx, импортировать все компоненты, если для них найден div-держатель, например, если существует <div id="login">, отобразить в нем <Login >

Сейчас я пытаюсь добавить модальные диалоги на пару страниц.У меня был следующий подход:

  • добавить следующий div ко всем страницам: <div id="modal" class="modal fade" tabindex="-1" role="dialog"></div>
  • создать компонент реагирования Modal, содержащий разметку, необходимую для начальной загрузки
  • подключите компонент реагирования к div
  • добавьте кнопки на определенных страницах, где это необходимо: <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal">

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

Я мог бы хранить некоторые глобальные данные в объекте window, но я нахожуэто довольно некрасиво.

Какие варианты у меня есть для передачи внешних данных в существующие компоненты React?Я открыт и для других вариантов, даже если они означают корректировку способа включения React.

1 Ответ

1 голос
/ 23 сентября 2019

Как отмечалось в моем комментарии, я думаю, что правильный способ подойти к вашей идее (если я правильно понял) - это сделать весь код React в одном приложении, но использовать Portal для визуализации каждого компонента вразличные элементы из исходных html-файлов (на самом деле пример ссылки на Portal делает нечто похожее на то, что вы хотите сделать).

Таким образом, вы также сохраните дублирование кода (если вы сделаете каждый компонент полностьюкроме того, в итоге вы получите все библиотеки React и другие модули внутри каждого, например), и было бы легко получить доступ к методу компонента из другого метода компонента, даже если они отображаются в другом элементе

...