umi是一个react脚手架,最近有一个功能,需要在组件第一次渲染前请求一次,后面组件重新渲染不需要再次发送请求。要实现这种功能,我决定使用umi里面的一个hook函数,即useRequest。请求代码如下
const {data:categorys}=useRequest(async () => {
const result=await Category.getAll()
const categorys={} as any
result.data?.forEach(category => categorys[category.id as number]={text:category.name})
return categorys
})
结果发现,categorys值始终为undefined,也就是说,useRequest返回对象的data属性始终为undefined。
后来经过反复尝试,发现useRequest函数传入的第一个参数必须是一个异步函数,并且这个异步函数的返回值必须是一个包含data属性的对象,否则封装后的响应数据就获取不到。修改后的代码如下
const {data:categorys}=useRequest(async () => {
const result=await Category.getAll()
const categorys={} as any
result.data?.forEach(category => categorys[category.id as number]={text:category.name})
return {data:categorys}
})
返回值改成{data:categorys}就可以了