У меня есть компонент карты, расположение центра карты которого связано с состоянием редукции.
<YandexMapView
ref = {this._mapRef}
location = {this.props.location}
onInteraction = {(event) => this.onMapPositionChanged(event)}
geocodingEnabled = {true}
onGeocoding = {(event) => this.onGeocoding(event)}
/>
Моя функция сохранения
onMapPositionChanged(event: OnInteractionResult) {
const {latitude, longitude} = event;
this.props.dispatch(updateLocation({
latitude, longitude,
}));
}
Когда я перемещаю карту, и после этого я перемещаю ее снова через короткое время, прежде чем мое старое состояние обновится до компонента, у меня будет бесконечный эффект дрожания.
Аномальная последовательность:
Компонент отправляет событие для обновления состояния с данными {широта: 1, долгота: 1}.
Состояние обновляется до {широта: 1, долгота: 1}.
В это время компонент отправляет другое событие для обновления состояния = {широта: 2, долгота: 2}, потому что я переместил карту.
Компонент получает старое состояние в props = {latitude: 1, longitude: 1}
Компонент обновляет свое местоположение на карте до старого {широта: 1, долгота: 1} и снова отправляет {широта: 1, долгота: 1}.
и все эти действия становятся бесконечными ...
Я попытался добавить задержку или дроссель в свои саги о сокращении, но это не помогло.





Вам необходимо отделить события от движения карты, инициированного пользователем, от событий, генерируемых программным перемещением карты. Вероятно, вы захотите вызывать onMapPositionChanged только для событий из Пользователь, перемещающего карту.
Вы не указали, какую библиотеку вы используете, но для React Native, например. Обратный вызов onInteraction doomsower / react-native-yandexmapkit имеет type атрибут, который можно использовать для этой цели. Какая бы библиотека вы ни использовали, вероятно, она поддерживает нечто подобное.
Так вы говорите, что создали бесконечный цикл? Может быть, это из-за двойных событий, вы можете ограничить их стрельбой только один раз?