-
Notifications
You must be signed in to change notification settings - Fork 2.7k
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
useDeepCompareEffect监听不到useRef的数据变化 #2236
Comments
|
你说的这个我知道,但是我额外定义一个useState,去触发组件的rerender,这样就可以监听到useEffect的依赖项变化。本质就是触发rerender,让useEffect重新执行,这样useEffect的依赖项全会被监听到,无论是props,还是state,还是ref,亦或是window对象身上的一个属性 |
所以这不是深浅拷贝的问题 |
嗯 意思是现在useDeepCompareEffect的实现是没任何问题的么? |
不要改引用的值哈,建议还是业务去做处理 |
18 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
描述:
使用useDeepCompareEffect去监听useRef上挂载的引用类型数据,当引用类型数据变化后,同时组件也重新触发渲染,但是useDeepCompareEffect的回调函数并没有执行。
bug演示Demo地址:
https://codesandbox.io/s/lively-pond-kxj8zv?file=/src/App.js
修改意见:
![image](https://private-user-images.githubusercontent.com/33356467/249357032-527d954c-c5c5-4b66-bd01-f1fdbf9007c4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjMyNTA0MzksIm5iZiI6MTcyMzI1MDEzOSwicGF0aCI6Ii8zMzM1NjQ2Ny8yNDkzNTcwMzItNTI3ZDk1NGMtYzVjNS00YjY2LWJkMDEtZjFmZGJmOTAwN2M0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODEwVDAwMzUzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU3ZmU2NjY5ZmNkYTE1NTU5ZWQwNjBjNzM3OWViMzA1NzFhY2NjNDI5YjAwYzI1NmIzN2Q0ODJlYzJiYzExOTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.imiEol4KgZ4T7aeFSWHE4NIYR7TRboN7VZnUlrqa7Js)
应该在packages/hooks/src/createDeepCompareEffect/index.ts文件的第13行代码,对deps进行深拷贝,否则对于引用类型的数据来说储存的是引用地址,在执行!depsEqual(deps, ref.current)的时候,deps与ref.current永远都是同一个值。
The text was updated successfully, but these errors were encountered: