-
-
Notifications
You must be signed in to change notification settings - Fork 91
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
definePlugin的使用方式疑惑以及onBefore的作为前置判断的需求 #204
Comments
这个确实遗漏了,在下一个版本会在 useRequest 添加上 plugins 这个参数
这指的是类型不一样吗,因为插件的 hooks 与 useRequest 的 hooks 是不一样的,只是这两个 hooks 的名称一样而已
这里我不是很理解,可以详细解释一下吗 |
当前遇到的前置判断主要是 例如 有一个详细信息 在修改或者查看的时候 会调取 A 接口 参数是ID 写法上就有多种处理 // 数据声明
const userId = ref() // 默认是空
const req = (id) => Promise.resolve({}) // 模拟查询 // 手动传参
const { data, runAsync } = useRequest(id => req(id), { manual: true })
// 调用
const queryUser = () => !!userId.value && runAsync(userId.value)
// 或者
const { data, runAsync: queryUser } = useRequest(()=> req(userId.value), { ready: computed(() => !!userId.value) })
// 或者合并
const { data, runAsync: queryUser } = useRequest(async ()=> userId.value? await req(userId.value) : undefined, { manual: true }) 第一种方式偏向于手动,更好理解是userId存在 查询用户 // 我看了 其他库的通用处理也是 ready状态切换自动请求。但是这个对初用该库的人来说有点理解困难。🤣 🤣 🤣 期望的方式 const { data, runAsync: queryUser } = useRequest(()=> req(userId.value), { manual: true, onBefore: () => /* 直接ID为空 中断请求 算作成功或者失败 */ !!userId.value })
const { data } = useRequest(()=> req(userId.value), { onBefore: () => /* 直接ID为空 中断请求 算作成功或者失败 */ !!userId.value, refreshDeps: /* id 变化自动请求 */ [userId] }) 这种方式对大家的理解更OK 直观明确 查询请求的前置判断是 ID 不能为空。调用方法也是查询。 |
https://www.attojs.com/guide/documentation/refreshDeps.html#refreshdepsaction 这个可能对你有帮助
|
这种方式我也处理过,但是呢,代码可能会显得撕裂。 类似的就是beforeRouteEnter 阻止 路由跳转进入 defineOptions({
beforeRouteEnter: (to, from, next) => {
/* not ok, stop router next operation by throw error */
}
}); |
老哥,plugins啥时候加啊 |
plugins 已经在 2.0.4 版本加入 |
大佬, 好像 usePagination 没有添加插件。usePaigination 可以添加插件吗? |
|
vue-request/src/useRequest.ts
Line 13 in 11f2546
谢谢大佬
definePlugin 已经有导出类型,但是没有看到预留参数接口去使用它。只在基础代码中有使用到。
我看到了代码中使用,但是没有预留参数接口
可不可以增加参数入口 方便添加一些附加功能。
因为业务中对分页请求的处理稍微要复杂点 想附加一些结构化导出到 usePagination中 ,现在实现的做法稍微复杂了点。如果有可以直接附加 自定义plugin 到其中就更好了
还有一个点很疑惑的是 插件中的onBefore 和 useRequest中的返回参数不一致
![image](https://private-user-images.githubusercontent.com/2883413/246005053-6ad50688-7ff9-4f4c-a3f1-beee35b29b04.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2OTY2NzcsIm5iZiI6MTczOTY5NjM3NywicGF0aCI6Ii8yODgzNDEzLzI0NjAwNTA1My02YWQ1MDY4OC03ZmY5LTRmNGMtYTNmMS1iZWVlMzViMjliMDQucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTZUMDg1OTM3WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MzRkOTEzNjg0ZTRiODFkNGE0ODBkYTBiODhmYjYxOTY2YjBkYzQzMjZmNWVjMjM5Y2M5MmE5MjE5NTliNThkMCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.k11zMAOoCT8kf6_AMALqlsJBsgYmbDi7Y4y5LHi4KuA)
其实请求中需要前置判断的时候较多,当前useRequest的onBefore 缺少了前置判断中断请求的方式。
ready 会有自动请求的一个理解问题,较多使用者无法理解其中含义。
所以通常的处理是 改为 manual 然后另外的方法判断后再调用 runAsync 增加了方法逻辑。
期望的其实是可以在onBefore中类似plugin的返回 isBreak或者其他Error Promise.reject之类的中断
但是如果大改 onBefore 会影响之前的版本使用,所以如果开放了plugin自定义附加回调应该也能满足简化使用的方式
Originally posted by @Colory in #121 (comment)
The text was updated successfully, but these errors were encountered: