backbone.js中源码解析的问题

JavaScript023

backbone.js中源码解析的问题,第1张

你可以直接在model实例调用 model.parse(response, options)

或是把parse定义在model里

var Book = Backbone.Model.extend({

parse: function(resp, options) {

// 在这里可以对fetch或是save后服务器返回的原始数据进行调整

return resp

}

})

涉及ts的变量声明、接口、类、函数、泛型等

ts语法知识

前提:定义了一个 Fecth 类,用于处理请求数据。

1)用法

2)源码分析

第一次调用时,缓存中不存在数据,则会自动执行获取数据

1)用法

2)源码分析

当开启 manual 禁止自动请求时,将 run 函数暴露给用户调用。

如果 fetchKey 不存在,则新建 Fetch 实例,保存到 feches 对象中,并调用实例的 run ,最后返回调用结果数据。

如果 fetchKey 存在,则直接调用 Fetch 实例的 run 。

作用:在取数结束后设定 setTimeout 重新触发下一轮取数。

1)用法

2)源码分析

在 Fetch 类中 _run(...args: P) 的实际取值函数中,最后会判断,是否设置了轮询 pollingInterval ,设置了则开启定时器。 注意,前提是当前页面没有被隐藏。

定时器及时销毁:在 _run 函数最开始,会对现有的定时器先进行销毁。

作用:设置 options.cacheKey 后开启对请求结果缓存机制,下次请求前会优先返回缓存并在后台重新取数。

1)用法

2)源码分析

每次请求都是创建一个 Fetch 实例,并用 fetchKey 进行唯一标识,并且调用 run 函数时,优先调用缓存实例。

1)用法

2)源码分析

根据传入的 config 配置来判断是否进行防抖和节流分发处理。

1)用法

2)源码分析

预加载本质是缓存机制,通过利用 useEffect 同步缓存实例, 保证缓存数据的最新,然后当需要用到数据时,优先调用缓存实例。

1)用法

2)源码分析

1)用法

2)源码分析

调用 mutate 传入的方法

分页:设置 options.paginated 支持分页场景

加载更多:设置 options.loadMore 支持加载更多的情况

分页和加载原理:在 useAsync 这个基础请求 hook 基础上再包一层 hook ,扩展取数参数与返回结果。

所以,不在此处多余赘述了。

document.visibilityState :表示下面 4 个可能状态的值

hidden :页面在后台标签页中或者浏览器最小化

visible :页面在前台标签页中

prerender :页面在屏幕外执行预渲染处理 document.hidden 的值为 true

unloaded :页面正在从内存中卸载

visibilitychange 事件:当文档从可见变为不可见或者从不可见变为可见时,会触发该事件。

函数返回值只会在组件的初始渲染中起作用,后续渲染时会被忽略

分析:对于同一个实例,可能出现多次调用 _run 方法,导致 this.count 和 currentCount 出现数据不同步的情况,比如,第一次调用 _run 后,刚好执行“关键点 闭包取数”后,还未执行到 return , 又执行了 _run ,导致此时 this.count+=1 ,那么第一次调用 _run.currentCount 的值比当前的 this.count 小1。

作用:保证 state 中的数据是最近一次访问接口得到的数据

源码github地址

用法地址

精读《@umijs/use-request》源码