decorator-loading
❗️❗️背景
在项目中使用 loading,一般是在组件中用一个变量( 如 isLoading)来保存请求数据时的 loading 状态,请求 api 前将 isLoading 值设置为 true,请求 api 后再将 isLoading 值设置为 false,从而对实现 loading 状态的控制,但是如果很多异步需求都这样做势必会增加冗余代码,而且对 loading 状态的控制与我们的业务完全无关,我们完全可以解耦出来,所以使用装饰器抽离这部分逻辑代码
⛽️⛽️如何使用
Component<any any> { superprops thisstate = count: 0 } @ public { axios } public { return <div styleName="page-demo"> <h2>hellos 🍺🍺🍺🍺🍺🍺</h2> <Button onClick=thissendGetDemoReq type="primary" style= marginTop: '8px' > request </Button> windowisLoading&&<YourLoading /> </div> }
参数
现在支持的是一个全局window参数,所以我们建议你初始化的时候就先把这个参数挂载到window上,当然你如果不想挂载到window上,而是自定义变量(现在还没有支持这个操作),你可以直接copy这个
装饰器
代码进行修改
参数名 | 值 |
---|---|
window.isLoading | false |
装饰器代码
moduleexports = { return { let v return enumerable: true configurable: true { if descriptor v = descriptorvalue if typeof v === 'function' return { windowisLoading = true try await v catch error // 做一些错误上报之类的处理 throw error; finally windowisLoading = false } } { v = c; } }}
注意⚠️
如果是你的项目有配置ts需要在tsconfig
配置"experimentalDecorators": true