Plugin

abstract class Plugin<TData : Any> : IFetch<TData> , Serializable, CoroutineScope

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

Constructors

Link copied to clipboard
constructor()

Properties

Link copied to clipboard
Link copied to clipboard
lateinit var fetchInstance: Fetch<TData>

因为我们无法像js那样直接定义一个函数类型的同时声明一个函数属性,而且因为序列化的考虑, 我们必须用一个实例对象来存储插件函数、初始化函数。故而Fetch的实例我们必须保存在插件对象中。 对外暴露的副作用也不能再直接通过Fetch实例调用,必须要再通过插件报装一手。

Link copied to clipboard

必须实现的invoke属性,该属性执行后返回PluginLifecycle, 它被调用的时机是实例化Fetch时,调用后存入Fetch.pluginImpls。 调用时应该执行initFetch拿到相应实例,返回值是PluginLifecycle

Link copied to clipboard
open val onInit: (RequestOptions<TData>) -> FetchState<TData>? = null
Link copied to clipboard

Functions

Link copied to clipboard
open override fun cancel()

插件默认有一个作用域,可通过

Link copied to clipboard
fun initFetch(fetchInstance: Fetch<TData>, options: RequestOptions<TData>)

插件在被invoke执行调用时初始化FetchRequestOptions