Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “如何倾听”;参考「;对象更改?_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript “如何倾听”;参考「;对象更改?

Javascript “如何倾听”;参考「;对象更改?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,考虑下面的例子。我有一个div的ref,我想把这个ref传递给Child但是如果我现在使用它,当ref对象更新并存储正确的HTML元素时,不会重新呈现子对象 我可以对它进行修复,并使用回调方法useCallback。只需取消注释注释注释行,并查看它是否正常工作(两种解决方案),因为父级由于状态更新而重新呈现,因此正确的引用也会从第一种方法传递 问题:有没有办法避免使用state并以某种方式让孩子知道ref对象在父对象中已更新 注意:我知道我可以在Child中使用useffect,并收听someR

考虑下面的例子。我有一个div的ref,我想把这个ref传递给Child但是如果我现在使用它,当ref对象更新并存储正确的HTML元素时,不会重新呈现子对象

我可以对它进行修复,并使用回调方法
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呢。