Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

希望useRequest能够新增一个不需要useRequest帮我管理请求结果的选项 #2418

Closed
Minglu-Huo opened this issue Dec 22, 2023 · 7 comments
Assignees
Labels

Comments

@Minglu-Huo
Copy link

useRequest针对service做了多层处理,如防抖、节流、延迟等,非常好用。
但当想结合全局状态管理比如zustand使用时,就需要维护两个状态,也会导致更新两次。
如果能够新增一个不需要useRequest帮我管理请求结果的选项,感觉非常妙,我可以自行选择在onsucess钩子或其他合适的钩子获取到结果自行管理数据

@liuyib
Copy link
Collaborator

liuyib commented Dec 26, 2023

上代码看看?展示下目前使用的代码方式 @ivan-hl

@Minglu-Huo
Copy link
Author

image
目前是这样的,注释了@liuyib

@liuyib
Copy link
Collaborator

liuyib commented Dec 26, 2023

目前 useRequest 结合状态库是会有多余的 render,但感觉这不是痛点。“维护两个状态”指的是?示例代码看不出来多维护了状态

@Minglu-Huo
Copy link
Author

Minglu-Huo commented Dec 26, 2023

比如有个点击事件需要调用后端接口,
我希望这个点击事件是被useRequest包装过的,
并且请求接口后返回的数据需要存在状态库进行管理。
那这个时候useRequest内部维护一个data,
状态库维护一个data,就会进行多次rerender @liuyib

@liuyib
Copy link
Collaborator

liuyib commented Dec 26, 2023

比如有个点击事件需要调用后端接口, 我希望这个点击事件是被useRequest包装过的, 并且请求接口后返回的数据需要存在状态库进行管理。 那这个时候useRequest内部维护一个data, 状态库维护一个data,就会进行多次rerender @liuyib

这个导致 rerender 的原因知道的,对于用户侧使用复杂度没影响,只是多 render 了一次。一般业务场景多 render 一次是没什么影响的,对于极致追求性能和 render 次数的场景,useRequest 确实做的没那么好,会有多余 rerender。

对于这里结合状态库的场景,想外部自己来控制状态的存储,对于 useRequest 内部更改可能就比较大了,会触发 render 的状态 hook 都不能用了,内部状态全部要用 ref 管理。

感谢反馈,这个 issue 先留着,后续看看其他人意见。

@FanetheDivine
Copy link

你的需求似乎并不需要使用帮你管理请求的工具,因为你的意图就是只执行一次。另外,我推荐你尝试useSWR管理全局状态或请求

@crazylxr
Copy link
Collaborator

比如有个点击事件需要调用后端接口, 我希望这个点击事件是被useRequest包装过的, 并且请求接口后返回的数据需要存在状态库进行管理。 那这个时候useRequest内部维护一个data, 状态库维护一个data,就会进行多次rerender @liuyib

如果你完全不需要 useRequest 的状态,为啥希望是被 useRequest 包装的呢?

@crazylxr crazylxr self-assigned this Mar 11, 2024
@crazylxr crazylxr closed this as completed Apr 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants