React 官方对于在渲染函数中抛出 Promise 的立场是什么?

Ale*_*kov 23 javascript promise reactjs react-suspense

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

\n\n\n\n

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

\n\n

考虑到这一切,我有点困惑,因为 React 文档中没有提到抛出 Promise(换句话说,是什么触发了 Suspense 组件),但同时有很多讨论和库使用它。在 Twitter 讨论中,dan abramov回答说API 可能会发生变化。但情况仍然令人困惑。

\n\n

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

\n\n

谢谢各位!

\n\n

更新

\n\n

根据这些问题(一、二),他们似乎仍然不确定未来的 API。他们很可能会提供一个公共 API(可能他们指的是反应缓存或更通用的东西),这本质上只是抛出 Promise 机制的包装。

\n

小智 11

简短回答

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

长答案

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

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

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

在应用程序中使用 React 内部结构

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

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