- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前正在尝试 react Hook 和 react 悬念。我正在尝试创建一个钩子(Hook) useApolloQuery
,它会获取一些数据并 promise 等待数据加载。
我将获取数据的逻辑放在 useEffect
中,但如果您立即在组件中抛出一个 promise(并因此暂停它),效果似乎永远不会运行。
这是我的代码:(或 codesandbox 链接:https://codesandbox.io/s/x73pwj164q)
function createPromiseResolver() {
let resolve;
const promise = new Promise(newResolver => {
resolve = newResolver;
});
return { resolve, promise };
}
function useApolloQuery() {
const [data, setData] = useState();
const promsieResolver = createPromiseResolver();
console.log("this runs");
useEffect(() => {
console.log("this doesn't run");
const timeoutId = setTimeout(() => {
setData("Some fake data");
promsieResolver.resolve();
}, 500);
return () => clearTimeout(timeoutId);
});
if (!data) throw promsieResolver.promise;
return data;
}
function App() {
const data = useApolloQuery();
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>{data}</h2>
</div>
);
}
所以在该代码中只有第一个 console.log 运行,因为 useEffect Hook 从不运行
悬念应该是这样的吗?有什么办法让它发挥作用吗?
最佳答案
useEffect
不会运行,因为您在实际函数返回之前抛出了一个 promise ,因此该 promise 永远不会得到解决。
问题出在线路上
if (!data) throw promsieResolver.promise;
初始 data
未定义,因此 !data = true
。它抛出一个 promise ,因此该函数永远不会返回但会短路。删除此行实际上会运行 useEffect
Hook
解决方案 2:或者您可以为 undefined
以外的数据设置初始状态,如下所示const [data, setData] = useState('初始数据');
关于javascript - react : Suspended component doesn't run the useEffect hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54678618/
C++ 社区目前正在讨论上挂协程与下挂协程。 例如,这个提案中提到了挂起:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4453.p
我刚刚在稳定 channel 上升级了 Flutter,并在尝试启动应用程序(在本地 iOS 模拟器上)时获得了以下 StackTrace。使用 flutter test 运行单元测试也会受到影响。
我想使用插件camera_camera。但是当我尝试编译项目时出现此错误: Flutter:错误:找不到 Getter:“正在暂停”。案例 AppLifecycleState.suspending。
我正在考虑有关 suspend 的事情Arrow 的文档详细解释了:suspend () -> A提供与 IO 相同的保证. 因此,根据文档,只需使用 suspend我们正在将不纯函数转换为纯函数:
Grails应用程序在启动时会以--debug-forked模式挂起。 我正在使用--debug-fork参数运行应用程序,但它会挂起并等待,直到调试器连接到它,然后调试器断开连接,应用程序再次等待调
请考虑以下代码: // program is reading data from an excel file, Sheet1 at cell(0,0). public class Read {
Windows 和 Solaris 线程 API 都允许在“暂停”状态下创建线程。线程仅在稍后“恢复”时才真正开始。我习惯了没有这个概念的 POSIX 线程,我正在努力理解它的动机。谁能建议为什么创建
将方法注释为 @Suspendable 的最佳实践是什么?在 Flow 中,可能有多个查询 vault/compute 业务逻辑的私有(private)方法。这些是否应该用 @Suspendable
有没有办法暂时暂停表单上所有锚定控件的移动或调整大小?即: procedure ScaleFormBy(AForm: TForm; n, d: Integer); begin AForm.Su
我一直在尝试追踪 Jedi VCL 的 JvHidControllerClass.pas 中的内存泄漏,我在源代码历史记录中发现了此更改: 旧版本: constructor TJvHidDeviceR
我正在制作具有过渡-缩放-平移-效果的幻灯片,其性能对于平滑渲染至关重要。这是一个我要移植到Delphi 10.3的旧项目,有一个线程可以在运行渲染到屏幕的同时从jpgeg-images的文件流中加载
我需要在用户继续使用它的同时调试生产服务器。当断点命中时,我希望为其他用户的请求提供服务的其他线程在我检查线程中的变量并决定跳过或进入方法时继续工作。 在 Java 中,当遇到断点时,您可以在“暂停线
大家好我在做秒表。对于暂停,我使用 Thread.suspend() ,对于恢复,我使用 Thread.resume()。但简历并不是恢复工作。代码: pause(){ shouldRun = f
有一个程序在 TCP/IP 端口中监听和应答请求(专有二进制协议(protocol))。但该程序需要更新,因此需要重新启动,然后才能继续在同一端口上执行其工作。 根据其协议(protocol),所有当
这个问题与 Thread.suspend 的替代方案无关。这是关于使用 Thread.suspend 实现偏向锁的可能性,(我相信)不能使用 Thread.interrupt 或类似的替代方案来实现。
所以我已经启动并运行了一台家庭服务器,并使用局域网唤醒对其进行了设置,并且有一位 friend 设法将其从两个州之外的地方唤醒。太棒了,这样我就可以运行文件服务器而无需一直保持开机状态。问题是,唤醒它
有没有办法确定是否已注册指纹但 Touch ID 由于指纹验证失败次数过多而当前处于“暂停”状态? 最佳答案 错误代码可以与 LAError 类进行比较。 func errorMessageForLA
一般问题... 如果我在我的 VBA 代码(基于 Excel)中暂停/退出/中断“For”循环,会有什么危险? 这是我的代码: For i = 1 to Sheets.Count 'check
我有一个 WPF 项目,当我尝试在 RowLoad 事件上运行此代码时,出现以下错误: private void ParentGridView_OnRowLoaded(object sender, E
在我的帐户页面/查看订阅中,在 ACTION 段落中,我有一个 CANCEL 按钮,但没有 SUSPEND 按钮。你知道这是否正常吗? 我跟踪了这个函数,它只返回取消数据:wcs_get_all_
我是一名优秀的程序员,十分优秀!