响应调用 setTimeout 在 onClick 似乎不等待
React call setTimeout at onClick seems not to wait
我需要在 onClick
函数上执行一个异步函数。所以,第一步是使用 setTimeout
来模拟它,我试过了,但我的组件没有等待 3 秒。
我的代码有什么问题?非常非常简单。
const {useState} = React;
const App = ({}) => {
const [loading, setLoading] = useState(false);
const doThat = async () => {
console.log(" doThat");
setLoading(true);
setTimeout(() => {
setLoading(false);
}, 3000);
setLoading(false);
};
return loading ? (
<div>Loading...</div>
) : (
<div>
<h1
onClick={() => {
console.log("clicked...");
doThat();
console.log("...end");
}}
>
Click me
</h1>
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="react"></div>
只需删除 setTimeout
之后的 setLoading(false);
const doThat = async () => {
console.log(" doThat");
setLoading(true);
setTimeout(() => {
setLoading(false);
}, 3000);
};
我需要在 onClick
函数上执行一个异步函数。所以,第一步是使用 setTimeout
来模拟它,我试过了,但我的组件没有等待 3 秒。
我的代码有什么问题?非常非常简单。
const {useState} = React;
const App = ({}) => {
const [loading, setLoading] = useState(false);
const doThat = async () => {
console.log(" doThat");
setLoading(true);
setTimeout(() => {
setLoading(false);
}, 3000);
setLoading(false);
};
return loading ? (
<div>Loading...</div>
) : (
<div>
<h1
onClick={() => {
console.log("clicked...");
doThat();
console.log("...end");
}}
>
Click me
</h1>
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="react"></div>
只需删除 setTimeout
setLoading(false);
const doThat = async () => {
console.log(" doThat");
setLoading(true);
setTimeout(() => {
setLoading(false);
}, 3000);
};