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