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

feat: function useSelectorQuery #23

Merged
merged 17 commits into from
Jul 16, 2023
Merged

feat: function useSelectorQuery #23

merged 17 commits into from
Jul 16, 2023

Conversation

edwinhuish
Copy link
Collaborator

Description 描述

Linked Issues 关联的 Issues

fixed: #17

Additional context 额外上下文

非常感谢作者带来这么好项目,之前一直在找类似的项目,可惜没有找到。

看到 #17 的issue,抽空尽一份力,封装了一下,由于暂时未使用此项目,暂未对封装进行测试。请 @ModyQyW 酌情进行测试合并。

@edwinhuish
Copy link
Collaborator Author

有考虑过加入 onMounted 判断,但是这里整个 useSelectorQuery 其实都应该在 onMounted 后执行,所以理应使用者在使用时就确保已 mounted

@ModyQyW
Copy link
Member

ModyQyW commented Jul 3, 2023

非常感谢你做的努力!🙏

代码看起来没有大问题,但我自己使用 useSelectorQuery 非常非常少,希望听听你们的意见 @KeJunMao @hairyf @zguolee @Ares-Chang @Megasu 这个实现是否切实地减轻了应用复杂度?你们认为有什么值得改进的地方?提前感谢你们 🙏

@edwinhuish
Copy link
Collaborator Author

@ModyQyW 最后还是增加了 onMounted 判断。感觉这样应该更方便使用。

@Megasu
Copy link
Member

Megasu commented Jul 3, 2023

@edwinhuish 🌹 感谢您的PR,我先用您提供的 useSelectorQuery 试着跑一下代码,还有您这边是否方便补全一个新增功能的文档?

参考:

tryOnShow

安全的 onShow。如果是在组件生命周期内,就调用 onShow();如果不是,就直接调用函数。

import { tryOnShow } from '@uni-helper/uni-use'

tryOnShow(() => {
  ...
});

@KeJunMao
Copy link
Member

KeJunMao commented Jul 4, 2023

我自己使用 useSelectorQuery 也非常非常少,ano-ui 有用到,库作者可能更常用吧,

@edwinhuish
Copy link
Collaborator Author

@Megasu 已增加 doc。

不过再次提醒,我暂未使用此库,所以这些代码都是根据经验写的,未经测试,麻烦请先测试,谢谢。

@ModyQyW ModyQyW requested review from nei1ee and hairyf July 7, 2023 08:23
@hairyf
Copy link
Member

hairyf commented Jul 7, 2023

嘿,@edwinhuish 我大致浏览了一下,感觉使用字面量描述要获取的信息会更加简洁一些,可以减少体积:

const queryScrollOffset = useSelectorQuery('boundingClientRect')
const info = await queryScrollOffset('#id')

你可以参考 ano-ui 的实现,实际运行代码不到 30 行左右

另外,貌似还缺少了 node 的获取,这在 canvas 绘制上会很有用

@edwinhuish
Copy link
Collaborator Author

edwinhuish commented Jul 7, 2023

感觉使用字面量描述要获取的信息会更加简洁一些,可以减少体积:

@hairyf 有看过你的实现方式。但是我觉得通过字符串去获取实际函数,在使用上,TS的代码提示没那么好,当然这个主要是个人习惯问题。

我个人更加偏向于如下:

const { getBoundingClientRect } = useSelectorQuery({ /* 这里可传入 hook 的全局参数,变量,用于初始化 hook */});

如果用户记不住这个 hook 内有什么函数,也没关系:

const query = useSelectorQuery();
const rect = await query.getBoundingClientRect('#id'); // 通过输入 点 来获取IDE代码提示比看函数重载的 d.ts 文件来得简单

相对于实现这个 hook 所需的代码量,我个人更看重的是调用它的通用性、所需的代码量、心智负担、以及代码提示、约束等等。。。

你可以参考 ano-ui 的实现,实际运行代码不到 30 行左右

其实我的实现方式也没有多少行,只不过项目所用的规范,单行字数太少,被压成多行了。

另外,貌似还缺少了 node 的获取,这在 canvas 绘制上会很有用

select 方法就是用于获取 node 的

const { select } = useSelectorQuery();
const node = select('#id');

@hairyf
Copy link
Member

hairyf commented Jul 10, 2023

@edwinhuish 我没意见,但还是建议提供一个 getNode 方法,另外,确保保证 CI 能跑通

@nei1ee
Copy link
Member

nei1ee commented Jul 10, 2023

对于目前的使用我也没意见,我用的也不多。后面遇到了其他场景还可以再增加新的功能。

@edwinhuish
Copy link
Collaborator Author

已更新

@ModyQyW ModyQyW merged commit 3d1f769 into uni-helper:main Jul 16, 2023
@ModyQyW
Copy link
Member

ModyQyW commented Jul 16, 2023

Thanks a lot man

@edwinhuish edwinhuish deleted the dev branch July 18, 2023 08:25
@ModyQyW
Copy link
Member

ModyQyW commented Jul 28, 2023

Launched 0.14.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feat(function): useQuerySelector and useQuerySelectorAll
6 participants