当前位置: 首页 > 知识库问答 >
问题:

前端 - React的use(promise) 为什么会出现promise被重复执行的问题?

严亮
2024-12-15

codesandbox demo

这个demo里面演示了 use的两种使用方式:

  1. 组件的props接受一个promise,然后在这个组件内部 use这个 promise. 对应Message这个组件
  2. 组件自身内部创建了一个promise,然后在组件内部 use这个promise . 对应ProductList 这个组件.

现象

ProductList这个组件中 productJson = use(productPromise); 这行代码 会导致 useMemo中的fetch products 疯狂执行发请求.而且从log日志来看 useMemo好像没有起到缓存的作用.
image.png

问题就是 为什么会这样?

共有1个答案

黄靖
2024-12-15

可以尝试打包应用后再检查一下,如果没有出现上述问题,那么可能是因为:React的Function组件在调试模式下不会被缓存,而是会每次都重新执行渲染(但原有的Class组件则不会);这是我以前写React遇到的一个现象,主要就是开发和调试的表现存在不一致性,具体原因没有深究过。

 类似资料:
  • 我从JS开始,实际上喜欢异步方面(来自Python),但我不确定为什么有些函数返回Promise。具体来说,下面使用的代码让我想知道返回了什么: 除了流之外,我们在之后得到的HTTP响应是一个文本块,客户端稍后会对其进行解释,以提取标题、正文和其他有趣的元素,作为HTTP内容分析的一部分。 关键是这个文本块是一块的,所以第一个已经有了整个响应——为什么JSON主体的解析是异步操作,不同于第二个?

  • 请大佬帮忙分析一下,以下代码执行顺序(正确的顺序是:a 1 2 3 b 4 c 5):

  • 我用Javascript编写了这段代码 是一个数组,它包含中的图像和中的图像名称。 现在我需要更改函数,因为将变成包含图像组的数组。每组都是一个数组,每个数组包含中的图像和中的图像名称。 于是我就这样改了函数: 这样它就不起作用了,因为循环只执行一次。 我认为问题是,因为如果我删除它,程序将永远留在循环中。我刚开始使用,所以我知道我犯了一些错误。

  • 我正在努力学习如何正确使用async Wait,但我对它有点共同的想法。 在片段中,我试图构建一个对象数组,其中包含我需要的关于我在组件中上传的文件的信息。问题是this.fileInfo中的对象并没有完全等待返回编码图像的promise,而是在我console.logthis.fileInfo时返回此输出: 如您所见,关键图像是一个值未定义的ZoneAwarePromise。你能帮我修一下吗?

  • 什么是Promise? 当开发者们决定要学习一种新技术或模式的时候,他们的第一步总是“给我看代码!”。摸着石头过河对我们来讲是十分自然的。 但事实上仅仅考察API丢失了一些抽象过程。Promise是这样一种工具:它能非常明显地看出使用者是否理解了它是为什么和关于什么,还是仅仅学习和使用API。 所以在我展示Promise的代码之前,我想在概念上完整地解释一下Promise到底是什么。我希望这能更好

  • 本文向大家介绍什么是Promise?相关面试题,主要包含被问及什么是Promise?时的应答技巧和注意事项,需要的朋友参考一下 Promise可以帮助我们更好地处理异步操作。下面的实例中,100ms后会打印result字符串。catch用于错误处理。多个Promise可以链接起来。

  • 可能的重复: 在JavaScript中Deferred、Promise和Future之间有什么区别? 有人能指出回调和promise之间有什么不同吗?什么时候应该使用promise等? 此外,关于如何创建和使用promise的链接将得到赞赏。

  • 问题内容: 使用Promises时,为什么不能在代码库的其他地方触发并定义? 我不明白为什么,应该在声明诺言的地方本地化逻辑。这是疏忽大意,还是强制执行此参数有好处吗? 我相信执行程序功能应该是可选的,并且它的存在应该确定promise是否封装了解决方案。没有这样的授权,promise的可扩展性就更大,因为您不必立即启动异步。承诺也应该是可重置的。这是1档开关,1或0 或。可以附加许多平行和顺序的