【问题标题】:What is the React official position for throwing promises inside render functions?在渲染函数中抛出 Promise 的 React 官方立场是什么?
【发布时间】:2020-05-04 14:27:10
【问题描述】:

React 中有一个很酷的新特性——Suspense 组件。目前它只官方支持使用 React.lazy 函数创建的组件。但非正式地众所周知,Suspense 组件内部是通过在渲染树中更深层次地抛出一个 Promise 来触发的,并且有一些库已经采用了这种技术来带来一种新的酷开发体验,例如:

还有一个核心反应包react-cache 使用它(当然是非官方的)。

考虑到这一切,我有点困惑,因为 React Docs 中没有提到任何关于抛出 Promise 的内容(换句话说,是什么触发了 Suspense 组件),但同时有很多谈话和库使用它。在推特讨论中dan abramov 回复说the API will likely change。但情况仍然令人困惑。

所以问题是:在生产中开始使用这种技术是否安全?如果没有,那么我如何使用已经采用它的库(甚至基于 facebook)?最后,如果 API(抛出 Promise)是将来要更改的主题,我可以确定这只是我需要在自己的实现中采用的微小更改吗?

谢谢各位!

更新

根据这些问题(onetwo),他们似乎仍然不确定未来的 API。他们很可能会提供一个公共 API(可能他们的意思是 react-cache 或更通用的东西),它本质上只是一个抛出 Promise 机制的包装。

【问题讨论】:

    标签: javascript reactjs promise react-suspense


    【解决方案1】:

    简答

    不,这不安全。 即使其他库使用它,您也不应该基于 React 内部编写代码(当然也不应该在生产环境中!)

    长答案

    那些使用 React 内部的库可能会推出一个与 React 的每个新版本兼容的新版本——这是维护者的工作。

    您可能会遇到的问题是维护人员不会更新他们的库以支持最新版本的 React,这会使您只能使用旧版本的 React。

    无论如何,在中继之类的情况下,您可以使用该库而无需过多担心维护。像中继这样的库在 Facebook 中被大量使用(至少据我所知),因此维护不会成为问题。

    在应用程序中使用 React 内部

    这是一个非常糟糕的主意(在我看来)。 如果你想这样做,这意味着你需要跟上 React 内部的步伐。 如果 suspense 的 API 发生变化(而且它们会发生变化),你需要重写所有使用该 API 的组件才能升级 React,这可不好笑。

    如果你需要我的建议:坚持使用官方版本的 React。

    【讨论】:

    • 感谢您的回复。我同意你的看法。由于许多流行的图书馆已经在使用它,这种情况变得越来越危险。我确实希望最终低级 API 将保持不变,它们只会提供稳定的公共 API。
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 2012-10-04
    • 2018-12-02
    • 2019-11-15
    • 2022-01-17
    • 2020-01-03
    • 2018-05-28
    • 1970-01-01
    相关资源
    最近更新 更多