javascript - 如何使用钩子(Hook)在 React 中使用 setTimeout() 来实现加载状态?

标签 javascript reactjs react-hooks

我有一个从 api 获取数据的应用程序。获取时有一个加载状态,会在屏幕上显示一个图标。然而,这只是一闪而过。我想在屏幕上显示加载图标 2 秒钟,以改进 UI 并让用户知道正在发生某些事情。

这是我的代码:

 const [info, setInfo] = useState({});
 const [loading, setLoading] = useState(false);

useEffect(() => {
    setLoading(true);
    axios
      .get(`https://restcountries.eu/rest/v2/alpha/${code}`)
      .then((response) => {
        console.log(response);
        setInfo(response.data);
        setLoading(false);
      });

  }, []);

 return (
    <div>
      <Link to='/'>
        <button>Back</button>
      </Link>
      {loading ? (
        <LoadingIcon />
      ) : (
        <CountryInfo
          info={info}
          borders={borders}
          languages={languages}
          currencies={currencies}
        />
      )}
    </div>
  );
};

最佳答案

你可以使用promise.all

因此,即使您的请求提早到来,您的加载也会显示至少 2 秒。

setLoading(true);
const fetchPromise = axios
  .get(`https://restcountries.eu/rest/v2/alpha/${code}`);
const timeOutPromise = new Promise(resolve => {
  setTimeout(resolve, 2000);
})

Promise.all([fetchPromise, timeOutPromise]).then(([response]) => {
  console.log(response);
  setInfo(response.data);
  setLoading(false);
})

关于javascript - 如何使用钩子(Hook)在 React 中使用 setTimeout() 来实现加载状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59925358/

相关文章:

javascript - 如何避免从 ExpressJS 抛出 400 错误

javascript - 在悬停问题上隐藏下拉菜单

javascript - 使视频源成为 Javascript 中的变量

reactjs - 是否可以在其构造函数签名中安全地解构 ES6 React Component 类?

javascript - 如何根据reactjs中现有数组中的选定值创建新数组

javascript - React useScript hook 如何处理多个调用

reactjs - 使用条件渲染时不会调用图像标签上的 React onLoad 事件

javascript - 在javascript中验证选择框

javascript - 只 react 展开和折叠一个面板

javascript - 在 React 钩子(Hook)中的另一个卸载 useEffect 中,状态的改变不会受到影响