Reactjs 反应:为什么从useRef更改ref的当前值不';t在这里触发useffect
我有一个关于Reactjs 反应:为什么从useRef更改ref的当前值不';t在这里触发useffect,reactjs,Reactjs,我有一个关于useRef的问题:如果我将ref.current添加到useffect的依赖项列表中,并且当我更改ref.current的值时,useffect内部的回调不会被触发 例如: 导出默认函数App(){ const myRef=useRef(1); useffect(()=>{ console.log(“myRef current changed”);//这仅在组件装载时触发 },[myRef.当前]; 返回( { myRef.current=myRef.current+1; 日志(“
useRef
的问题:如果我将ref.current
添加到useffect
的依赖项列表中,并且当我更改ref.current
的值时,useffect
内部的回调不会被触发
例如:
导出默认函数App(){
const myRef=useRef(1);
useffect(()=>{
console.log(“myRef current changed”);//这仅在组件装载时触发
},[myRef.当前];
返回(
{
myRef.current=myRef.current+1;
日志(“myRef.current”,myRef.current);
}}
>
更改参考
);
}
当useRef.current
更改时,useffect
中的内容运行时,不应该这样吗
另外,我知道我可以在这里使用useState
。这不是我要问的。我还知道,在重新渲染期间,ref
在引用上保持不变,所以它不会改变。但我不是在做类似的事情
constmyref=useRef(1);
useffect(()=>{
//...
},[myRef]);
我将
当前值
放在dep列表中,这样应该会更改。好的,所以我认为您缺少的是更改ref的值不会导致重新渲染。因此,如果它不会导致重新渲染,则该函数不会再次运行。这意味着不再运行useffect
。这意味着它永远没有机会比较这些值。如果使用状态更改触发重新渲染,您将看到效果现在将运行。因此,请尝试以下方法:
export default function App() {
const [x, setX] = useState();
const myRef = useRef(1);
useEffect(() => {
console.log("myRef current changed"); // this only gets triggered when the component mounts
}, [myRef.current]);
return (
<button
onClick={() => {
myRef.current = myRef.current + 1;
// Update state too, to trigger a re-render
setX(Math.random());
console.log("myRef.current", myRef.current);
}}
>
change ref
</button>
);
}
导出默认函数App(){
const[x,setX]=useState();
const myRef=useRef(1);
useffect(()=>{
console.log(“myRef current changed”);//这仅在组件装载时触发
},[myRef.当前];
返回(
{
myRef.current=myRef.current+1;
//也更新状态,以触发重新渲染
setX(Math.random());
日志(“myRef.current”,myRef.current);
}}
>
更改参考
);
}
现在您可以看到它将触发效果。
请记住,useRef的内容更改时不会通知您。更改.current属性不会导致重新渲染。如果您想在React将ref附加或分离到DOM节点时运行一些代码,则可能需要使用回调ref
将useRef更改为useState。@T04435这不是我要问的问题的答案here@Joji查看Github React页面上的相关讨论。我知道ref就像指向内存中某个值的指针,在重新呈现时指针保持不变。但我用的是这里的值。而这个值是一个基元类型,也就是数字,它应该是变化的。我也知道如何使用
useState
,这个问题与此无关。@Joji好的,我明白你的意思,我改变了我的答案,我想这就是你想要弄明白的