Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 单击图像后,设置状态未更新_Reactjs - Fatal编程技术网

Reactjs 单击图像后,设置状态未更新

Reactjs 单击图像后,设置状态未更新,reactjs,Reactjs,我在代码中使用了两次setstate()。首先,该方法在单击图像时执行。在更新状态之后,我调用另一个方法,因为我使用更新的状态来设置其他元素的状态。 在第一次单击中,代码正常工作。当我再次单击图像时,它不工作 import Heart from '../../assets/images/heart.png'; import yelloHeart from '../../assets/images/yello_heart.png'; 在第二次点击时,我得到了正确的输出。但我希望图像每次都能切

我在代码中使用了两次setstate()。首先,该方法在单击图像时执行。在更新状态之后,我调用另一个方法,因为我使用更新的状态来设置其他元素的状态。 在第一次单击中,代码正常工作。当我再次单击图像时,它不工作

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() 
    });

}