Javascript “如何倾听”;参考「;对象更改?
考虑下面的例子。我有一个div的ref,我想把这个ref传递给Child但是如果我现在使用它,当ref对象更新并存储正确的HTML元素时,不会重新呈现子对象 我可以对它进行修复,并使用回调方法Javascript “如何倾听”;参考「;对象更改?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,考虑下面的例子。我有一个div的ref,我想把这个ref传递给Child但是如果我现在使用它,当ref对象更新并存储正确的HTML元素时,不会重新呈现子对象 我可以对它进行修复,并使用回调方法useCallback。只需取消注释注释注释行,并查看它是否正常工作(两种解决方案),因为父级由于状态更新而重新呈现,因此正确的引用也会从第一种方法传递 问题:有没有办法避免使用state并以某种方式让孩子知道ref对象在父对象中已更新 注意:我知道我可以在Child中使用useffect,并收听someR
useCallback
。只需取消注释注释注释行,并查看它是否正常工作(两种解决方案),因为父级由于状态更新而重新呈现,因此正确的引用也会从第一种方法传递
问题:有没有办法避免使用state并以某种方式让孩子知道ref对象在父对象中已更新
注意:我知道我可以在Child中使用useffect
,并收听someRef
更改,但我希望能够访问函数体中的someRef对象,而不仅仅是在钩子体中
const{useState,useRef,useCallback}=React;
const Child=({someRef,node})=>{
console.log(someRef,node);//someRef始终为null且不更新。。。
返回null;
}
常量应用=()=>{
/*第一种方法*/
const someRef=useRef(null);
/*第二种方法*/
const[node,setNode]=useState(null);
const someRef2=useCallback(n=>{
如果(n!==null){
//setNode(n)不,据我所知,没有办法订阅/收到ref
更改的通知
从上开始useRef
:
请记住,useRef
的内容更改时不会通知您。更改。当前的属性不会导致重新渲染。如果要在React将引用附加或分离到DOM节点时运行某些代码,您可能需要使用回调引用
在一天结束时,你的应用程序将必须响应状态的变化。要么是父级状态,要么是自己的子级状态
甚至可以在父对象的渲染阶段更新ref
,使其保持“同步”在父项上进行任何状态的更改。但毕竟触发更新的是状态的更改,而不是ref的更改。让子项检查一个全局变量。如果这个globalVar==1,globalVar=0;dowhat这看起来像是一个错误。你能描述一下你的总体目标吗?参考值将在渲染,所以useffect(()=>{console.log(someRef)},[someRef])
就可以了。但是这似乎是错误的。如果你能更好地描述你的整体问题,你可能会找到更好的解决方案。“你可能想改用回调ref。”这是什么意思?这是上面的文档。就我个人而言,我从未使用过它。但是从文档上显示的示例来看,使用useRef+useffect
而不是callback ref
模式,似乎可以很容易地实现相同的行为。使用useffect
,将非常容易实现“当React将引用附加或分离到DOM节点时运行一些代码”,正如他们在文档中提到的那样。基本上,当useEffect
运行时。DOM节点的ref
已经存在。不,在这种情况下,不需要使用ref
回调。文档上的示例似乎是一个过时的模式。不过,是否应该使用sill呢。