У меня есть приложение response/redux, которое имеет диаграмму recharts, которая анимируется при изменении данных.Предотвращение обновлений компонентов из нескольких реквизитов в реакции
Я использую Redux
, и большинство моих действий изменяют только одно свойство state
, из-за которого получается props
проход. Однако некоторые из моих действий теперь используют thunks
для некоторых асинхронных действий и вызова других действий.
Например, у меня могло бы быть действие getChartData
, которое вызывается, когда пользователь выбирает ось.
export let getChartData = axis => dispatch => {
// trimmed for brevity
fetchJSON(url).then(data => {
dispatch(dataRetrievalSuccess(data));
dispatch(updateSelectedAxis(axis));
}).catch(error => {
dispatch(dataRetrievalError(error));
});
};
В этом примере значение updateSelectedAxis
изменит локальную государственную собственность отвечает за отображение выбранной в данный момент оси и функции dataRetrievalSuccess
будет нести ответственность за передачу props.data
на графику.
Проблема, которую я пытаюсь решить, состоит в том, чтобы предотвратить обновление диаграммы, когда выбранные элементы реквизита selectedAxis изменились, но данных нет.
Я думал, что я мог бы использовать что-то вроде componentWillRecieveProps
но вопрос, я здесь с моим выше thunk
например, что я получаю один вызов componentWillRecieveProps
, когда я звоню dataRetrievalSuccess
, который имеет те же данные в обоих this.props.data
и nextProps.data
так что я может предотвратить обновление. Однако, когда я потом звоню updateSelectedAxis
, у меня нет data
как часть реквизита, поскольку он уже изменен, поэтому я не могу выполнять логические операции на основе двух значений.
Я думал, что это может быть проблема с заказом, но даже если я упакую это в одно действие, я все равно получаю несколько настроек реквизита.
Могу ли я решить эту проблему путем упаковки данных и изменения оси в один объект? Я не совсем уверен, что это лучший способ сделать это в архитектурном плане и приветствовать любые предложения.
EDIT: Просто немного расширить, я направляю два действия, оба, которые меняют свой собственный бит состояния, которое вызывает два делает.
Я пытался писать что-то вроде этого:
shouldComponentUpdate(nextProps, nextState) {
if(this.dataHasChanged(nextProps)) {
return true;
}
return false;
}
который почти работает, но каждый раз, когда данные диаграмма показывает один визуализации позади, где она должна быть.
Как насчет shouldComponentUpdate (nextProps, nextState)? –
Это единственное государственное имущество, которое вы упомянули, состоит из DATA и AXIS? В другом мире, в глобальном состоянии, у вас есть доступ к этим переменным? (и его доступный через this.props, который вы передаете компоненту? Я пропустил эту часть. Если у вас есть доступ к этим двум объектам, вы можете использовать функцию componentShouldUpdate:> – MariuszJasinski
@ DennisStücken Проблема в том, что я получаю два вызова этого функция, одна с данными и одна с изменением оси, и мне нужно обойтись, нужно ли обновлять анимацию диаграммы. – dougajmcdonald