gpt4 book ai didi

javascript - 如何将 setTimeout 与 Loader 一起使用

转载 作者:行者123 更新时间:2023-12-02 21:18:52 25 4
gpt4 key购买 nike

我有一个简单的功能组件,我单击一个按钮并显示它,我试图让导入的微调器在单击按钮时显示 2 秒,然后在两秒后显示我导入的组件,但是我我只能让微调框在单击按钮后显示 2 秒,并且无法让它停止

import React, { useState } from "react";
import Hello from "./Hello";
import Spinner from '../Spinner/Spinner'
import "./styles.css";

export default function App() {
const [show, setShow] = useState(false);
const [loading, setLoading] = useState(false);

const helloHandeler = () => {
setTimeout(() => {
setLoading(!loading)
}, 2000)
setShow(!show);
};

if (loading) return <Spinner />

return (
<div className="App">
<h1>Adding a Spinner</h1>
<div className="bodyContainer">
{!show && <button onClick={helloHandeler}>Click me</button>}
{show && <Hello />}
</div>
</div>
);
}

可以在这里找到工作示例:https://codesandbox.io/s/gallant-engelbart-y3jus

最佳答案

您可以添加 useEffect Hook 来更新 DOM。

您仅更新处理程序内的loading 标志。 React 不知道它需要更新 DOM。

useEffect(() => {
if (loading) {
setTimeout(() => {
setLoading(false);
}, 2000);
}
}, [loading]);

fork 代码和框:https://codesandbox.io/s/inspiring-liskov-t53fv

关于javascript - 如何将 setTimeout 与 Loader 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60904128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com