У меня есть приложение, которое получает сообщения с сервера каждые 1 секунду и через socket.io эти сообщения передаются в компонент реакции.Реагирование на изменения частоты в React.js/Flux
Мой компонент реагирования использует архитектуру стиля потока, поэтому он вызывает действие, когда получено сообщение, которое добавляет (или обновляет) запись в коллекции в магазине.
Мой компонент отслеживает изменения в магазине, а затем обновляет пользовательский интерфейс при его изменении. В этом случае он рисует маркер на карте.
Проблема в том, что из-за частоты обновлений мой компонент перерисовывает все маркеры каждую секунду, чего я не хочу.
Я ищу подход, позволяющий моему компоненту карты отвечать на изменения в коллекции в магазине, но не обновлять состояние каждую секунду.
Я думал, что у меня может быть коллекция необработанных данных, а затем выборочно обновлять коллекцию networkGPS выборочно в моем магазине, но компонент, похоже, изменяется на основе любого свойства в магазине, поскольку все они, похоже, являются частью его государство.
Резюмируя Я ищу:
- Собирать данные каждую 1 секунду в сыром виде и добавить эти данные в хранилище.
- Привязать компонент к коллекции в этом магазине, которую я обновляю только тогда, когда изменения требуют перерисовки интерфейса.
То, что я думаю, что нужно сделать:
Либо:
- Избегайте ввода исходных данных в состояние магазина (на данный момент я не уверен, как объявить коллекцию, которая не является частью государства)
OR
- Сделайте мой компонент более умным относительно того, когда он перерисовывается, поэтому он не пытается перерисовывать при каждом изменении состояния.
Я не уверен, что является наиболее подходящим решением проблемы, любая информация будет с благодарностью получена.
Извините, если вопрос немного неясен, я новичок в реакции/флюсе. Пожалуйста, просите о любых разъяснениях.
EDIT
На данный момент я получаю вокруг этого вопроса, сохраняя массив элементов (карта маркер в этом примере), я хочу, чтобы мой компонент для отображения в самом компоненте :( , когда состояние меняются изменения и рендеринг, я перехватываю свойства состояния, решаю, нужно ли что-то менять в коллекции маркеров и при необходимости изменять их только. Если изменений не требуется, сбор в компоненте остается неизменным и не выполняется перерисовка.
Это не идеальный вариант, я чувствую, что должен иметь возможность разрешить моему компоненту отвечать только на определенные изменения состояния, но я еще не нашел его, все еще ищу лучшего ответа.
Не могли бы вы рассказать о том, как «эти сообщения передаются в реагирующий компонент»? – shashi
Конечно, на данный момент у меня есть соединение с сторонним аппаратным компонентом, у которого есть событие «данных». На этом событии я анализирую информацию на сервере, создаю разумно форматированный json-объект и 'io.sockets.emit (data)' данные. Мой клиент-клиент слушает сообщение socket.io, и когда он получает данные, он вызывает метод действия updateGPSData (data) '. Этот метод выталкивает данные в пару массивов в хранилище. Массивы являются частью состояния магазинов, поэтому, когда они обновляются, изменяется состояние моего реагирующего компонента и вызывается метод рендеринга с новыми данными. – dougajmcdonald