#reactjs
Вопрос:
Я хочу сделать a boolean
true
одним нажатием кнопки, но он показывает «неопределенный» на console.log
export default class productdetail extends Component {
constructor(props){
super(props);
this.state = {
showCartMessage:false ,
}
this.handleCartListener = this.handleCartListener.bind(this);
}
handleCartListener(){
this.setState({ showCartMessage: true });
console.log(this.showCartMessage)
}
actionForProducts(product) {
return(
<div className="">
<button className="add_cart btn rounded-pill w-100 " onClick=
{this.handleCartListener}>
Add To Cart
</button>
</div>
)
}
render(){
return(
<div className="p-3 h-100 ">
{this.actionForProducts(this.props.productdetail)}
</div>
)
}
}
Как это решить? Я пробовал так много раз, но это дает один и тот же ответ.
Ответ №1:
showCardMessage-это свойство переменной состояния. Не экземпляр класса.
console.log(this.state.showCartMessage)
Ответ №2:
Состояние было обновлено должным образом. вы должны просто использовать this.state.showCartMessage
, чтобы увидеть изменения.
вы можете использовать функцию обратного вызова для проверки состояния после обновления.
handleCartListener(){
this.setState({ showCartMessage: true }, ()=>{console.log(this.state.showCartMessage) });
}
Ответ №3:
Если вы хотите поставить console.log
для проверки новое значение state
. Вы должны поместить его в render (), потому что состояние имеет новое значение только при повторной визуализации компонента
render(){
console.log(this.state.showCartMessage)
}
Комментарии:
1. это работает для меня, но в первом клике это дает мне ложь в консоли, а затем дает истину
Ответ №4:
попробуйте работать с асинхронным ожиданием, у меня была та же проблема, значение обновляется, но консоль.журнал показывает неопределенное состояние, пока при следующем щелчке он не отобразит предыдущее состояние. Попробуйте это :
async handleCartListener(){
await this.setState({ showCartMessage: true });
console.log(this.showCartMessage)
}
Ответ №5:
вы должны использовать setState обратного вызова
handleCartListener(){
this.setState({ showCartMessage: true },()=>{
console.log(this.state.showCartMessage)
});
}