7

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

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

Having all this in mind I'm kinda confused because there is no any mention in React Docs about throwing promises (in other words what triggers Suspense component) but at the same time there are lots of talks and libraries that use it. In twitter discussion dan abramov replied that the API will likely change. But still the situation is confusing.

So the question is: Is it safe to start using this technique in the production? If not, then how can I use libraries (even facebook based) that have already adopted it? Finally, if the API (throwing promises) is the subject to be changed in future, can I be assured that it's just a tiny change that I need to adopt in my own implementation?

Thanks folks!

Update

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

4

1 回答 1

4

简短的回答

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

长答案

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

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

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

在应用程序中使用 React 内部

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

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

于 2020-01-17T17:24:02.510 回答