reto
reto copied to clipboard
初学者的一些小疑问
Hi,无意中找到了这个库,发现我最近写的一个库和你的实现原理基本一致 !看来我们的想法高度一致啊哈哈哈!
大概看了下代码,有一处地方有细微的差别:
- https://github.com/awmleer/reto/blob/master/src/consumer.tsx#L48
- https://github.com/nekocode/use-shared-state/blob/master/src/index.ts#L77
当 hook 所在组件重新渲染且 deps 参数发生改变时,是否重新订阅会更好呢?
非常感谢指正~
这里的确有些纰漏,在组件重渲染并更改了 deps 参数时,useEffect 中还是会继续使用旧的 deps 参数。。重新订阅的确是可以的
useEffect(() => {
// ...
}, [deps])
但是这样可能增加一些不必要性能开销,毕竟 useStore(FooStore, s => [s.id]) 中的 deps 函数每次渲染引用都会变。。
所以也许可以改成:
const depsFnRef = useRef()
depsFnRef.current =deps
useEffect(() => {
// ...
// 在这里使用 depsFnRef.current 而不是 deps
}, []) // 这里不需要把 deps 放在数组中了
BTW,你的 use-shared-state 也写的很棒呀~简单直接~
感谢回复🙏在你这种固定会订阅的情况下确实像你说这么做会更好~学习到了哈哈哈