hooks icon indicating copy to clipboard operation
hooks copied to clipboard

【V3】useRequest 取消initialData导致的开发体验问题

Open xuqianjin opened this issue 2 years ago • 5 comments

不废话..直接上代码...

// v2

const getApiDataAres = useRequest(getApiDataA, {
    initialData: DataAinit
})
const getApiDataBres = useRequest(getApiDataB, {
    initialData: DataBinit
})
const getApiDataCres = useRequest(getApiDataC, {
    initialData: DataCinit
})

<RenderComponent loading={getApiDataAres.loading} data={getApiDataAres.data}>
<RenderComponent loading={getApiDataBres.loading} data={getApiDataBres.data}>
<RenderComponent loading={getApiDataCres.loading} data={getApiDataCres.data}>

// v3

const {data:getApiDataA_data = DataAinit,loading:getApiDataA_loading} = useRequest(getApiDataA})
const {data:getApiDataB_data = DataBinit,loading:getApiDataB_loading} = useRequest(getApiDataB})
const {data:getApiDataC_data = DataCinit,loading:getApiDataC_loading} = useRequest(getApiDataC})

<RenderComponent loading={getApiDataA_loading} data={getApiDataA_data}>
<RenderComponent loading={getApiDataB_loading} data={getApiDataB_data}>
<RenderComponent loading={getApiDataC_loading} data={getApiDataC_data}>

问题: V3想使用initialData,必须使用结构赋值方式..这就逼我必须对每个解构变量重新命名.及其不优雅...有没有最佳实践?难道你们写业务也是对每个变量重新命名??

xuqianjin avatar Mar 28 '22 13:03 xuqianjin

确实没有考虑到这个问题。

我考虑下是否加上这个配置项。

brickspert avatar Mar 29 '22 06:03 brickspert

还有个问题就是,解构的话 null 不会被默认值覆盖的。

const a = { b: null};
const {b = 1} = a;
console.log(b); // b 为 null

GeraltX avatar Apr 07 '22 07:04 GeraltX

请求加回,就因为这个问题,只好用回v2。

huadream avatar Aug 12 '22 01:08 huadream

确实,多个命名冲突就比较麻烦

chenbinli-dev avatar Aug 24 '22 03:08 chenbinli-dev

过去一年多了还没有动静。initialData 很适合做 null object,在还没有取得数据的时候自动填充空值。没有 initialData 只能满世界做空值判断,太头疼了。

好像谁回答过这问题,请求没成功前数据就默认是undefined,逻辑倒没问题。

chenbinli-dev avatar Dec 26 '23 14:12 chenbinli-dev