componentWillReceiveProps вызывается не только при смене реквизита, но и при повторном рендеринге родителя и, следовательно, всякий раз, когда он вызывается, состояние оценивается и устанавливается снова.
У вас есть два варианта
- Если вы не изменяете состояние
isAvailable
внутри, вы можете просто использовать его непосредственно из реквизита.
Например:
const isAvailable = this.props.bookingSuggestionStatus && this.props.bookingSuggestionStatus.res.data.status=='available'
Если вы модифицируете его, вам нужно проверить, изменились ли реквизиты, что вы можете сделать в
componentWillReceiveProps
(используйте
getDerivedStateFromProps
начиная с v16.3.0 и далее)
Например:
componentWillReceiveProps(nextProps){
if(!_.isEqual(nextProps.bookingSuggestionStatus, this.props.bookingSuggestionStatus) && Object.keys(nextProps.bookingSuggestionStatus).length >0) {
if(nextProps.bookingSuggestionStatus.res.data.status=='available') {
this.setState({isAvailable:false})
} else {
this.setState({isAvailable:true})
}
}
}