vue-request icon indicating copy to clipboard operation
vue-request copied to clipboard

[Feature Request] Request option `onFirst`.

Open s3xysteak opened this issue 1 year ago • 1 comments

需求描述 Feature Description

比方说,我希望在第一次返回请求结果时给某个变量赋予一个初始值,我一般使用 vueuse 的一个函数以方便的实现这个效果。

const active = ref()
const { data } = useRequest(api)
watchOnce(data, (res) => {
  active.value = res[0]
})

但大量的这种行为是繁琐的,我想这应该是一个常见的需求,因此希望轮子能自带这方面的支持,api看起来像这样:

const active = ref()
useRequest(api, { onFirst: data => { active.value = data[0] } })

建议的解决方案 Proposed Solution

let isFirst = true

// 假设处理请求的方法叫做execute
function execute() {
// ...
  const _onFirst = () => {
    onFirst()
    isFirst = false
  }
  isFirst && _onFirst()
  // ... 
}

其他信息 Other information

s3xysteak avatar Apr 22 '24 06:04 s3xysteak

你可以自行写一个插件,类似这样的:

export const onFistPlugin =  definePlugin((queryInstance, options) => {
  const isFist = ref(true)
  return {
    onSuccess(data) {
      if (!isFist.value) {
        return
      }
      options.onFirst?.(data)
      isFist.value = false
    }
  }
})

 --- example ---
useRequest(api, {
  onFirst: data => { active.value = data[0] }
}, [onFistPlugin])

chuxiaoguo avatar Apr 28 '24 02:04 chuxiaoguo

@John60676 Hi,看起来 https://www.attojs.com 里没有提到任何和插件相关的内容,搜索功能也搜不出来插件相关的章节,插件是非公开特性吗?

s3xysteak avatar Jul 07 '24 13:07 s3xysteak

只是文档没有写,但实际上是可以使用的。等我忙完这段时间文档我会补一下

John60676 avatar Jul 08 '24 01:07 John60676

关闭这个issue是因为需求已经可以通过plugin很好的解决,我在这里开了个新issue #242 以方便对插件文档的追踪

s3xysteak avatar Jul 10 '24 11:07 s3xysteak