需求:自己封装一个组件,使用useRequest 发请求,想要获取全局配置,做一些默认处理,但是库中没有导出configContext配置选项,所以没法获取全局配置;
注:可以在包下的lib、es中获取到configContext但是在不同的环境可能会出现导入错误的configContext而获取不到全局配置
svmlkihl1#
你可以不用全局配置,改为基于 useRequest 封装一个 Hooks。
chhkpiq42#
比如使用场景:开发一个react公用组件,这个组件要用useRequest发起一个请求,因为是一个公用组件,所以不知道请求的响应格式是什么,虽然可以接收一个formatResult处理函数,但是如果用的地方多了,就需要做重复工作,但是如果有导出configContext配置,只需要接收一下全局配置就行;这种场景可以自己构建一个context来添加全局配置,但是我觉得,如果能使用useRequest的全局配置会更好一些
vql8enpb3#
再补充一个应用场景:@umijs/plugin-request 插件的 formatResult配置提供了默认配置 (res => res?.data),因为没有接受全局配置,所以@umijs/plugin-request 插件的formatResult将无法全局设置formatResult,只能通过全局配置一个dataField字段值,但我们有个项目返回数据主体字段是 resultObj、resultObjs,无法通过dataField配置,因此项目中出现了无数的 formatResult: res => res?.resultObj(s) 这样的配置;
nkcskrwz4#
自己封装一个 Hooks 可以解决你的问题吧?
const useNewReqeust = (service, options)=>{ return useRequest(service, { formatResult: (r)=> r, ...options, }) }
fcwjkofz5#
就拿你给的这个demo举例,我写了这么一个自定义hooks,封装了一些自定义逻辑供被人使用,但是我不知道用的人服务端数据结构,formResult只能给个常用的默认值,因为封装的逻辑要用到formResult,所以不能留空,这样如果formResult不符合用户的数据结构,所以只能在每次使用这个自定义hooks是配置一下formatResult选项了
vktxenjb6#
这个问题,我还是自己创建一个context配置,来自定义全局配置吧;不用useRequest提供的全局配置
6条答案
按热度按时间svmlkihl1#
你可以不用全局配置,改为基于 useRequest 封装一个 Hooks。
chhkpiq42#
比如使用场景:开发一个react公用组件,这个组件要用useRequest发起一个请求,因为是一个公用组件,所以不知道请求的响应格式是什么,虽然可以接收一个formatResult处理函数,但是如果用的地方多了,就需要做重复工作,但是如果有导出configContext配置,只需要接收一下全局配置就行;这种场景可以自己构建一个context来添加全局配置,但是我觉得,如果能使用useRequest的全局配置会更好一些
vql8enpb3#
再补充一个应用场景:@umijs/plugin-request 插件的 formatResult配置提供了默认配置 (res => res?.data),因为没有接受全局配置,所以@umijs/plugin-request 插件的formatResult将无法全局设置formatResult,只能通过全局配置一个dataField字段值,但我们有个项目返回数据主体字段是 resultObj、resultObjs,无法通过dataField配置,因此项目中出现了无数的 formatResult: res => res?.resultObj(s) 这样的配置;
nkcskrwz4#
自己封装一个 Hooks 可以解决你的问题吧?
fcwjkofz5#
自己封装一个 Hooks 可以解决你的问题吧?
就拿你给的这个demo举例,我写了这么一个自定义hooks,封装了一些自定义逻辑供被人使用,但是我不知道用的人服务端数据结构,formResult只能给个常用的默认值,因为封装的逻辑要用到formResult,所以不能留空,这样如果formResult不符合用户的数据结构,所以只能在每次使用这个自定义hooks是配置一下formatResult选项了
vktxenjb6#
这个问题,我还是自己创建一个context配置,来自定义全局配置吧;不用useRequest提供的全局配置