Сохранение таймера в синхронизации c между компонентами - PullRequest
0 голосов
/ 30 января 2020

Немного предыстории: я пытаюсь выучить React и создаю небольшое приложение с next (используя шаблон из учебника, который я делал некоторое время go). Недавно я столкнулся с проблемой, когда мне нужно синхронизировать таймер между двумя компонентами, которые не находятся в одной иерархической структуре.

У меня есть компонент Item, который отображает некоторые подробности об этом элементе (описание, заголовок и т. д. c) в более сжатой форме (фрагмент, отображающий только часть всей информации об элементе). Если я нажму на плитку Item, у меня появится следующий компонент js Link, который выглядит следующим образом:

 <Link href={{pathname: "/item", query: { id: item.id }}}>
    <a>{item.title}</a>
 </Link>

, который перенаправит меня на новую страницу, содержащую компонент ItemDetails, который просто отображает всю информацию для этого элемента более подробно и используя всю страницу вместо только плитки, используемой для Item.

Как упомянуто выше, проблема в том, что я хочу, чтобы таймер обратного отсчета был синхронизирован c между Item и ItemDetails (может быть запущен, остановлен и т. Д. c из любого из из них, и это состояние будет отражено в другом компоненте). Сначала я подумал об использовании MobX и создании хранилища, а также о том, чтобы сохранить одинаковое состояние между двумя компонентами. Однако проблема в том, что у меня есть несколько экземпляров компонента Item, каждый из которых указывает на свой собственный ItemDetails и использует одно хранилище, которое просто делит состояние первого запущенного таймера между всеми Item с. (хотя здесь я могу ошибаться, поскольку MobX - это то, о чем я только что начал читать вчера ^^).

Мой вопрос: как лучше всего подойти к этой проблеме? Это выполнимо с использованием магазинов Mobx plus или это вопрос структуры приложения (например: найти способ сделать Item и ItemDetails частью одной иерархической структуры?

Любая помощь будет оценили.

1 Ответ

1 голос
/ 30 января 2020

Вот рабочий пример использования «контекста» React для обмена данными между компонентами и ссылками для сохранения времени между повторными рендерингами:

https://codesandbox.io/s/silly-http-h25dr?fontsize=14&hidenavigation=1&theme=dark

...