Как сделать в операторе if 2 условия в componentDidUpdate. Вот мой код:
componentDidUpdate(prevProps, prevState) {
if (
prevState.address_id !== this.state.address_id &&
prevState.whoIsMetting !== this.state.whoIsMetting
) {
console.info("hello")
}
}
Он не запускает никаких событий, но если я использую их отдельно, он работает нормально. Мне нужно проверить оба утверждения одновременно. Можно ли сделать 2 условия в componentDidMount или есть другие способы?
Это проверит, изменились ли оба address_id и whoIsMetting. Возможно, вы захотите использовать || вместо &&, чтобы проверить, изменилось ли какое-либо значение.
@ Sagivb.g Мне нужно проверить их одновременно, тогда, если оба true запускают мою функцию
@Caramiriel Мне нужны оба состояния одновременно, мне не нужно ни то, ни другое
Так что код, который вы разместили, в порядке



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вам нужно, чтобы они оба были истинными, вы можете связать их:
componentDidUpdate(prevProps, prevState) {
if (prevState.address_id !== this.state.address_id){
if ( prevState.whoIsMetting !== this.state.whoIsMetting){
// do stuff if both true;
} else {
// do stuff if first true and second false
}
} else {
// do stuff if first false
}
}
Если ОП требует, чтобы оба условия были истинными при проверке, его код должен работать нормально. Ответ, который я опубликовал, просто делает то же самое длиннее. Единственное, о чем я могу думать, так это о том, как работают другие компоненты, его условия отменяют друг друга. Вроде либо первое верно, либо второе. По моему ответу он может отследить какой именно.
@Dblaze47 Спасибо! Это то, что я хочу. Я пару раз упомянул, что мне нужно, чтобы оба условия были истинными, почему все продолжают предлагать ответы с одной проверкой или || утверждение.
Ваша проблема в логике вашего if, а не в синтаксисе. Вы можете написать любой допустимый JavaScript внутри componentDidMount, так как это такая же функция, как и любая другая.
Написание двух функций if следующим образом:
if (prevState.address_id !== this.state.address_id)
...
if (prevState.whoIsMetting !== this.state.whoIsMetting)
...
Сильно отличается от одновременной проверки обоих утверждений с помощью оператора &&. && означает, что оба должны быть истинными. Если вам нужен способ проверить их оба и получить тот же результат, как если бы вы использовали два if (как указано выше), тогда:
if (
prevState.address_id !== this.state.address_id ||
prevState.whoIsMetting !== this.state.whoIsMetting
)
Выполню работу, так как вы проверяете одно OR другое, чтобы быть правдой.
Вы использовали &&, тогда условие будет истинным, если оба они были истинными, в противном случае, если вы хотите выполнить утверждение, если одно из них истинно, вы можете вместо этого использовать ||.
И если ваше состояние
prevState.address_id !== this.state.address_id
правда это проверит
prevState.whoIsMetting !== this.state.whoIsMetting
но если первое условие ложно, оно не будет проверять второе и сразу вернет false.