Метод 1
Как правильно заметил @Alexander в своем комментарии, лучший способ «подписаться» на конкретное изменение состояния, о котором вы говорите, - это когда axios
вызов API завершен и установлен в состояние.
this.setState()
принимает второй аргумент, который является обратным вызовом, который вызывается сразу после установки состояния.
axios.get('https://my.api.mockaroo.com/products?key=24ebcce0').then(response => {
this.setState({
allProductsDummy: response.data
}, () => {
// Do whatever you wanna do with the now loaded state
display()
});
});
Метод 2
React имеет метод жизненного цикла, который называется componentDidUpdate
, который принимает в качестве аргументов предыдущий реквизит и предыдущее состояние.Вы можете написать функцию так, чтобы она проверяла, изменено или нет значение состояния allProductsDummy
.
componentDidUpdate(prevProps, prevState) {
if (prevState.allProductsDummy !== this.state.allProductsDummy) {
// If unequal, then execute
display()
}
}
Теперь вышеприведенное будет работать для большинства примитивов (строка, число, логическое значение), но нетак для объектов, потому что в javascript {a:1, b:2} !== {a:1, b:2}
будет иметь значение true, поэтому вам, возможно, придется отдельно позаботиться о равенстве объектов, либо импортировав _lodash
, либо сделав собственную вспомогательную функцию.