Если я вас правильно понимаю:
- У вас есть данные
- Вы собираетесь отобразить эти данные на карте.
Что немного неясно в вашем вопросе - это то, являются ли параметры panBy данными, которые вы храните в своем состоянии избыточности.
Немного странно, что вы сохранили бы эти параметры в состоянии избыточности, потому что это больше действий, которые вы делаете один раз, а не объективные данные о чем-либо.
То, что я имею в виду, - данные, которые, я думаю, вы будете хранить в состоянии, будут такими, как «имя», «адрес», «широта», данными, которые всегда будут выглядеть одинаково при применении. Принимая во внимание, что данные панорамирования будут отображаться по-разному каждый раз, когда вы их отображаете.
Но в любом случае - если вы просто отображаете / применяете все, что у вас есть в вашем состоянии избыточности - я бы сделал следующее:
- Подключить состояние редукса к компоненту через mapStateToProps
- Реализуйте componentDidUpdate, и если mapData обновился, то примените все соответствующие методы карты.
Но вернемся к вопросу panBy - я бы посоветовал вместо хранения параметров panBy хранить центр карты и уровень масштабирования. Таким образом, он будет выглядеть одинаково каждый раз, когда вы его применяете.
Кроме того, вы можете сохранить исходные параметры центра и panBy и использовать их, чтобы каждый раз пересчитывать карту.
т. состояние притока:
mapState: {
center: {
x: 100,
y: 200,
},
panBy: {
x: 10,
y: 0
}
}
и затем в вашем componentDidUpdate
вы оба повторно центрируете его - и применяете кастрюлю, что-то вроде:
componentDidUpdate(prevProps) {
if (this.props.mapState !== prevProps.mapState) {
const {mapState} = this.props.mapState;
Map.center(mapState.center);
Map.panBy(mapState.panBy);
}
}
Недостаток этого метода в том, что вы каждый раз избыточно перецентрируете карту, и в зависимости от того, как работает API, это может выглядеть плохо.
Я думаю, что лучшее решение - это вручную пересчитать центр - как предлагает Spark.Bao.