路由

历史上,Relay 在Facebook内部作为路由框架开始。然而,Relay 不再对路由做出任何设想,并且可以使用各种路由选项。

不用路由 #

如果应用程序的 Relay 部分是某个小部件或单个视图作为较大应用程序的一部分,则不需要任何路由。您可以 QueryRenderer 在页面上的某个地方呈现您需要的数据。这个选项很简单,应该足够使用。

Flat 路由#

当不使用 Relay 数据依赖关系嵌套路由时,例如在使用 Flat 路由时,只需要QueryRenderer 为需要 Relay 数据的应用程序渲染一部分即可。您还可以使用以下选项将您的路由与其数据依赖关系集成。

嵌套路由 #

N带有 Relay 数据依赖关系的嵌套路由引入了一个额外的复杂性。虽然可以渲染QueryRenderer每个路由, ,但是这样做将导致在一般情况下,父路由不会呈现其子路由的请求流, 直到这些父路由的数据可用。这通常导致加载页面的数据不必要的额外延迟,但对于小应用程序或具有浅路由树的应用程序可能是可接受的。

集成选项可用于开放源代码路由库,而不是并行地为嵌套路由提取数据。在许多情况下,使用批处理网络层可以避免发送多个HTTP请求带来额外的好处。

React 路由 #

与 Relay Classic 集成反向路由器v2或v3可通过 react-router-relay, 它将聚合匹配路由的查询,并且并行请求所有路由的数据。

React Router v4的基于组件的方法不容易允许聚合嵌套路由的数据要求,因此不容易允许避免从嵌套 QueryRenderer 组件请求流的方法。

发现 #

通过 Found Relay发现提供集成 Relay Modern 和 Relay Classic。 Found Relay 并行运行对匹配路由的查询,并支持使用Relay Modern从代码分割中下载异步捆绑并行获取 Relay 数据。

自定义路由和更多 #

上面列出的选项并不详尽。如果您知道其他路由解决方案比Relay Modern有效,请告诉我们