Reactjs 单击图像后,设置状态未更新
我在代码中使用了两次setstate()。首先,该方法在单击图像时执行。在更新状态之后,我调用另一个方法,因为我使用更新的状态来设置其他元素的状态。 在第一次单击中,代码正常工作。当我再次单击图像时,它不工作Reactjs 单击图像后,设置状态未更新,reactjs,Reactjs,我在代码中使用了两次setstate()。首先,该方法在单击图像时执行。在更新状态之后,我调用另一个方法,因为我使用更新的状态来设置其他元素的状态。 在第一次单击中,代码正常工作。当我再次单击图像时,它不工作 import Heart from '../../assets/images/heart.png'; import yelloHeart from '../../assets/images/yello_heart.png'; 在第二次点击时,我得到了正确的输出。但我希望图像每次都能切
import Heart from '../../assets/images/heart.png';
import yelloHeart from '../../assets/images/yello_heart.png';
在第二次点击时,我得到了正确的输出。但我希望图像每次都能切换。这是您经常遇到的陷阱。从: setState()并不总是立即更新组件。可能 批处理或将更新推迟到以后。这使得阅读成为一种状态 就在调用setState()之后,这是一个潜在的陷阱。相反,使用 componentDidUpdate或设置状态回调(设置状态(更新程序、, 回调),其中任何一个都保证在更新后触发 已应用。如果需要根据上一个设置设置状态 状态,请阅读下面的更新程序参数 所以你可以做的一件事是:
imageClickedHandler = () => {
this.setState(state => ({
heartClicked: !state.heartClicked
}), () => { // We used callback based version, the callback will fire once the state is set.
this.changeImage()
});
}
这是您遇到的常见陷阱。从: setState()并不总是立即更新组件。可能 批处理或将更新推迟到以后。这使得阅读成为一种状态 就在调用setState()之后,这是一个潜在的陷阱。相反,使用 componentDidUpdate或设置状态回调(设置状态(更新程序、, 回调),其中任何一个都保证在更新后触发 已应用。如果需要根据上一个设置设置状态 状态,请阅读下面的更新程序参数 所以你可以做的一件事是:
imageClickedHandler = () => {
this.setState(state => ({
heartClicked: !state.heartClicked
}), () => { // We used callback based version, the callback will fire once the state is set.
this.changeImage()
});
}
我对此功能使用一个状态
函数App(){
const[clicked,setClicked]=useState(false);
返回(
设置状态示例
);
}
您可以签入codesandbox。
我对此功能使用一种状态
函数App(){
const[clicked,setClicked]=useState(false);
返回(
设置状态示例
);
}
您可以签入codesandbox。
changeImage = () => {
if (this.state.heartClicked) {
this.setState({ heartImage: yelloHeart })
}
}
<img onClick={this.imageClickedHandler} src={this.state.heartImage} alt="heart" />
imageClickedHandler = () => {
this.setState(state => ({
heartClicked: !state.heartClicked
}), () => { // We used callback based version, the callback will fire once the state is set.
this.changeImage()
});
}