云泥

Results 211 comments of 云泥

这个问题确实在热更新时存在,但是首次挂载不会,待进一步排查问题根源~ ~~用 dom 获取的方式是没问题的:~~ (也有问题) ```ts useClickAway( (e) => { /** xxx */ }, () => document.querySelector("#xxx"), ); ``` 用 ref 有问题: ```ts useClickAway( (e) => { /** xxx */...

奇怪,热更新目前测试情况如下:[CRA](https://create-react-app.dev/)、Vite、Umi、Dumi v2.x 创建的项目,热更新后,无法复现这个问题。目前就 ahooks 这个仓库里的 demo 中可以复现这个问题(dumi v1.x)

又用了 dumi v1.x 创建一个新的项目,也是复现不了这个问题。 目前只有 ahooks 的仓库里的 demo 能复现,这个问题估计和啥配置有关~ 有点难搞

@pule-dpr 你的项目里,组件第一次挂载时,会有这个问题吗?还是说热更新后才会有问题?

> demo:[codesandbox.io/p/sandbox/useclickaway-bug-forked-ngt6qk?file=%2FApp.tsx%3A60%2C67](https://codesandbox.io/p/sandbox/useclickaway-bug-forked-ngt6qk?file=%2FApp.tsx%3A60%2C67) 这个在线 demo 也可以热更新后复现这个问题。 回头我再升级下这个仓库的 dumi 试试能否复现问题。

> 点击之后每次的图标都不是之前的图标,自然ref.current.contains(event.target)这个判断就始终为false 是这个原因呢~ > 我认为useClickAway本意是点击之外元素触发,那至于之内元素是否是新元素或者是否切换元素,是不是不重要。 能做到这种效果更好,我后面尝试处理~

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

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

> 比如有个点击事件需要调用后端接口, 我希望这个点击事件是被useRequest包装过的, 并且请求接口后返回的数据需要存在状态库进行管理。 那这个时候useRequest内部维护一个data, 状态库维护一个data,就会进行多次rerender @liuyib 这个导致 rerender 的原因知道的,对于用户侧使用复杂度没影响,只是多 render 了一次。一般业务场景多 render 一次是没什么影响的,对于极致追求性能和 render 次数的场景,useRequest 确实做的没那么好,会有多余 rerender。 对于这里结合状态库的场景,想外部自己来控制状态的存储,对于 useRequest 内部更改可能就比较大了,会触发 render 的状态 hook 都不能用了,内部状态全部要用 ref 管理。 感谢反馈,这个 issue 先留着,后续看看其他人意见。

Gitee Pages 下线了,恢复日期未知,ahooks 的文档后面会寻找其他更稳定的静态资源托管服务。