在Reactnative中使用useEffect时如何才能有条件地执行

93 阅读1分钟

我在useEffect中创建了一个名为func的异步函数。 当从firestore收到数据时,"urlsdata "数据被setUrl保存。之后,如果useState中包含的url中有数据,我就隐藏SplashScreen,并将renderbool改为true。 然而,当useEffect在应用第一次渲染时被执行,由于某些原因,它被执行了两次,所以api总共被执行了两次。我认为这是非常不必要的,所以下面的代码只在renderbool为假时执行。

但是当renderbool为false时,它仍然被执行两次。我怎样才能使func只运行一次?

请注意,url和renderbool是必须的。

这是我的代码

const [url, setUrl] = useState('');
const [renderbool, setRenderbool] = useState(false); 

useEffect(() => {
    const func = async () => {
        if(!renderbool) {
            const urlsdata= await storage().ref('/main.jpg').getDownloadURL();
            setUrl(urlsdata);
        if(url) {
    SplashScreen.hide();
    setRenderbool(true);
        }
        }
    }
    
    func();
    },[url, renderbool]);