Распространение действия из контекста в компонент в React - PullRequest
0 голосов
/ 29 февраля 2020

Я не могу найти хороший шаблон в однонаправленном потоке данных React для моего варианта использования. У меня есть таймер контекст, используя https://github.com/supremetechnopriest/react-idle-timer. Когда время истекло, все дети с формами, имеющими формы, должны сохранить свое состояние (перед выходом из системы). У меня есть несколько идей решения, но я не продан ни одному из них:

  • Отправка пользовательского события в контексте моего таймера простоя, добавьте слушателя этого события в формы при монтировании, удаление слушателя при размонтировании (или то же самое с useEffect) - Проблемы:
    • Я думаю, должен быть лучший способ сделать это в React / redux - это напоминает мне angularjs широковещательные рассылки.
    • Если вы отмените подписку, это может привести к утечке памяти.
  • Контекст передает подпорку, и эта подпорка отслеживается в компоненте формы. Чтобы предотвратить многократный запуск, я отслеживаю сохранение в локальном состоянии. - Проблема:
    • Довольно неуклюже управлять сохранением, комбинируя реквизит и состояние.
  • Предоставить метод подписки / отмены подписки как свойство из контекста, эти методы принимать обратные вызовы, и они вызываются до выхода из системы. Проблемы:
    • Как и в первом предложенном решении, забыв отказаться от подписки может привести к утечке памяти
    • Реализация управления подпиской сложно протестировать / поддерживать.
  • Интегрируйте Rx JS, выставьте наблюдаемый в виде реквизита формы, подпишите / отмените подписку на него в компоненте формы. Проблемы:
    • Добавлять Rx JS только для этой функции - излишне
    • Утечка памяти снова

Есть ли очевидное и элегантное решение, которое мне не хватает? Если нет, то какой путь предпочтительнее предложенных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...