Package-level declarations

Types

Link copied to clipboard
typealias CancelFn = () -> Unit
Link copied to clipboard
class Fetch<TData : Any>(options: RequestOptions<TData> = RequestOptions()) : IFetch<TData>
Link copied to clipboard
data class FetchState<TData>(var loading: Boolean? = null, var params: TParams? = null, var data: TData? = null, var error: Throwable? = null) : IFetchStata<TData> , Copyable<FetchState<TData>>
Link copied to clipboard

Fetch.pluginImpls 本质是调用GenPluginLifecycleFn函数后保存的PluginLifecycle列表 ,这个函数的入参是Fetch实例与RequestOptions配置。

Link copied to clipboard
sealed class IFetchStata<out TData>

使用密封类或者密封接口,可以避免外部继承实现,但是不影响使用接口声明。

Link copied to clipboard
typealias MutateFn<TData> = ((TData?) -> TData) -> Unit
Link copied to clipboard
data class OnBeforeReturn<TData>(val stopNow: Boolean? = null, val returnNow: Boolean? = null, val loading: Boolean? = null, val params: TParams? = null, val data: TData? = null, val error: Throwable? = null) : IFetchStata<TData> , Copyable<OnBeforeReturn<TData>>
Link copied to clipboard
data class OnRequestReturn<TData>(val requestDeferred: Deferred<TData>? = null) : Copyable<OnRequestReturn<TData>>
Link copied to clipboard
abstract class Plugin<TData : Any> : IFetch<TData> , CoroutineScope

插件函数 useXXXPlugin 的返回值是真实的插件Plugin对象, 可以通过在useRequestPluginsImpl中调用onInit函数,用来初始化 Fetch.fetchState状态。 插件对象自身实现了协程作用域CoroutineScope,持有Fetch的实例、请求RequestOptions配置等内容。 按需实现IFetch对应Fetch中的各个函数调用,就可以在插件函数useXXXPlugin中需要使用副作用函数时,间接回调Fetch实例。 具体用例可以参考:useAutoRunPlugin

Link copied to clipboard
abstract class PluginLifecycle<TData>

插件的生命周期对象:这个对象是插件Plugin.invoke方法执行后的返回值, 用来让插件监听请求的生命周期,当执行异步请求时,会在不同的阶段调用插件的生命周期;

Link copied to clipboard
typealias PluginOnBefore<TData> = (TParams) -> OnBeforeReturn<TData>?

插件声明周期回调函数的类型定义

Link copied to clipboard
typealias PluginOnCancel = () -> Unit
Link copied to clipboard
typealias PluginOnError = (e: Throwable, params: TParams) -> Unit
Link copied to clipboard
typealias PluginOnFinally<TData> = (params: TParams, data: TData?, e: Throwable?) -> Unit
Link copied to clipboard
typealias PluginOnMutate<TData> = (data: TData) -> Unit
Link copied to clipboard
typealias PluginOnRequest<TData> = (requestFn: SuspendNormalFunction<TData>, params: TParams) -> OnRequestReturn<TData>?
Link copied to clipboard
typealias PluginOnSuccess<TData> = (data: TData, params: TParams) -> Unit
Link copied to clipboard
typealias RefreshFn = () -> Unit
Link copied to clipboard
typealias ReqFn = VoidFunction
Link copied to clipboard
data class RequestOptions<TData>

Functions

Link copied to clipboard

返回一个空插件,避免直接使用EmptyPlugin实例

Link copied to clipboard
fun <TData : Any> useRequest(requestFn: SuspendNormalFunction<TData>, optionsOf: RequestOptions<TData>.() -> Unit = {}, plugins: Array<ComposablePluginGenFn<TData>> = emptyArray()): Tuple7<TData?, Boolean, Throwable?, ReqFn, MutateFn<TData>, RefreshFn, CancelFn>

性能优化版本,optionsOf 是一个普通的内联函数,他会在每次组件重组时调用,这回带来一些性能上的损耗,我们可以简单呢的通过 remember,进行优化。 在未来版本将会把原始的直接传递对象这类api转变为私有,只允许通过闭包方式使用。

fun <TData : Any> useRequest(requestFn: SuspendNormalFunction<TData>, options: RequestOptions<TData> = remember { RequestOptions() }, plugins: Array<ComposablePluginGenFn<TData>> = emptyArray()): Tuple7<TData?, Boolean, Throwable?, ReqFn, MutateFn<TData>, RefreshFn, CancelFn>

Description: 一个用来管理网络状态的Hook,它可以非常方便的接入到传统的 retrofit 网络请求模式中。 你几乎不需要做任何额外工作,就可以简单高效的在 Compose 中使用网络请求,并将请求数据作为状态,直接驱动UI。