比如下面的代码,用一个简单 submitting 来说明(不是实际的业务需求,只是个演示)。
如果真的要在回调里去读取当前的 submitting 状态,有什么方法吗?
我知道有一个 useEffect hook ,去监听 submitting 状态的变更。但是感觉这样好麻烦,实际业务中,状态一多,就是一团麻的感觉。另外,有时候状态变更并不能很精准的表达实际发生的事情。就拿这个 submitting 来说。它可能是用户点击了 button 触发的,也可能是通过其它事件方式触发的,如果这些触发的事件也是业务需要考虑的,那简单的监听 submitting 变更似乎不能满足业务需求(可能还要加个类似 trigger by 的状态?)。
import { useState } from "react";
export const DebugPage = () => {
const [submitting, setSubmitting] = useState(false);
const handleSubmit = () => {
setSubmitting(true);
// 用 setTimeout 模拟异步请求
setTimeout(() => {
// 在异步回调的时候,这个 submitting 的状态依然是 false 。
// 这个我能理解。因为这个生成这个词法闭包上的时候 submitting 就是 false 。
//
// 但是假如我需要在这里读取 submitting 当前的准确状态,要怎么做?有办法做到吗?
console.log('submitting: ', submitting);
setSubmitting(false);
}, 1000);
}
return (
<button onClick={handleSubmit}>{submitting ? 'Submitting' : 'Submit'}</button>
)
}
不知道有没有描述清楚我的问题。谢谢各位~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.