# Suspense

使用并行模式安全的方式连接 RxJS 与 React Suspense。使用方法见 Render-as-You-Fetch (using Suspense)

# ObservableResource

Class ObservableResource<TInput, TOutput>

将 Observable 转换为类 Relay 的 Suspense 数据源。

v2.2.0 添加自 v2.2.0。

类型参数:

  • TInput 输入源 Observable 的值类型。
  • TOutput 输出源的值类型,默认与输入源一致。

Constructors:

new ObservableResource(
  input$: Observable<TInput>,
  isSuccess?: (value: TInput) => value is TOutput
): ObservableResource

参数:

参数名 类型 描述
input$ Observable<TInput> An Observable.
isSuccess (value: TInput): value is TOutput 可选函数用于判断 input$ 产生的值是否为“成功”状态,不是则触发 Suspense。默认都为 true

Public 属性:

参数名 类型 描述
shouldUpdate$$ Subject<undefined> 组件需要重新渲染时会产生值。

Public 方法:

参数名 类型 描述
read (): TOutput 处于成功状态则返回值,否则抛出 Suspense。产生异常则抛出异常。
destroy (): void UnSubscribe input Observable.
reload (newInput$?: Observable<TInput>): void v2.3.5 清理并重新订阅 input Observable。产生异常的 Hot Observable 因为无法重新启动故必须提供新的 Observable newInput$。推荐尽可能使用 Cold Observable 以便重载。(另外对于不熟悉 Observable 温度的朋友,注意即便 Subject 是 Hot, subject.pipe(...) 是 Cold 的)

# useObservableSuspense

useObservableSuspense<TInput, TOutput>(
  resource: ObservableResource<TInput, TOutput>
): TOutput

从 Observable 数据源中获取值。

v2.2.0 添加自 v2.2.0。

不同于 Promise,Observable 实现的是多次推值协议。这个 hook 会在 Suspense 重新触发时自动更新组件。

类型参数:

  • TInput Value type of the input Observable.
  • TOutput Resulted resource value. Default TInput.

参数:

参数名 类型 描述
resource ObservableResource<TInput, TOutput> Observable resource.

Returns:

TOutput resource value.