微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使依赖项没有改变,为什么 useEffect 会在页面重新加载时触发?

如何解决即使依赖项没有改变,为什么 useEffect 会在页面重新加载时触发?

我的一个 React 组件中有这个 useEffect。

const [photo,setPhoto]=useState();

useEffect(()=>{
    console.log("inside photo useEffect")
    setIsLoading(true);

    fetch("/uploadPhoto",{
        method:"post",body:photo
    })
    .then(res=>res.json())
    .then(data=>{
        setPhotoURL(data.secure_url);
        setIsLoading(false)
    })
    .catch(err=>{
        console.log(err);
    })
},[photo])

我只想在“photo”的值改变时触发这个useEffect。但是每当页面重新加载时它就会被触发。

如何实现这一目标?

解决方法

我找到了一种方法来做到这一点。 似乎 useEffect 默认在每个渲染上执行,而与依赖无关。我们使用依赖项作为第二个参数来定义何时应该再次执行 useEffect。

我像这样更改了我的代码并且它起作用了。

useEffect(()=>{
    if(photo){ 
        console.log("inside photo useeffect")
        setIsLoading(true);
        

        fetch("/uploadPhoto",{
            method:"post",body:photo
        })
        .then(res=>res.json())
        .then(data=>{
            setPhotoURL(data.secure_url);
            setIsLoading(false)
        })
        .catch(err=>{
            console.log(err);
        })
    }
},[photo])

仅当“photo”有值时才会执行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。