我想在反应期间显示加载

I want to show loading during working in react

当前代码仅在工作结束后(约 3 秒)显示 "Done !!!"。 我想在"Loading..."之后先显示"Done !!!"。

import React, { useState, useEffect, useCallback } from "react";

const App = () => {
    const [loading, setLoading] = useState<boolean>(false);
    const [workingResult, setWorkingResult] = useState<string>();

    const runWorking = useCallback(async () => {
        // working.... (during about 3 seconds)
        var start = new Date().getTime();
        while (new Date().getTime() < start + 3000);

        return "Done !!!";
    }, []);

    const setWorking = useCallback(async () => {
        setLoading(true);
        setWorkingResult(await runWorking());
        setLoading(false);
    }, [runWorking]);

    useEffect(() => {
        setWorking();
    }, [setWorking]);

    return <div>{loading ? "Loading..." : workingResult}</div>;
};

export default App;

你需要使用 promise 构造函数 while 将无法工作,因为异步函数需要 return promise 的函数,所以试试这个:

  const runWorking = () =>
    new Promise(resolve =>
      setTimeout(() => {
        resolve("done");
      }, 3000)
    );

const setWorking = async () => {
    setLoading(true);
    setWorkingResult(await runWorking());
    setLoading(false);
}

这里是一个完整的工作 example

谢谢。 我解决了。

const runWorking = () => new Promise(resolve => setTimeout(() => { 
    let returnValue:any = [];
    // working...
    resolve(returnValue); }, 1)
 ); 

    const setWorking = async () => { 
setLoading(true); 
setWorkingResult(await runWorking()); 
setLoading(false); 
}