reactjs - React:为什么从 useRef 更改 ref 的当前值不会在这里触发 useEffect
问题描述
我有一个问题useRef
:如果我添加ref.current
到 的依赖项列表中useEffect
,并且当我更改 的值时,不会触发ref.current
其中的回调。useEffect
例如:
export default function App() {
const myRef = useRef(1);
useEffect(() => {
console.log("myRef current changed"); // this only gets triggered when the component mounts
}, [myRef.current]);
return (
<div className="App">
<button
onClick={() => {
myRef.current = myRef.current + 1;
console.log("myRef.current", myRef.current);
}}
>
change ref
</button>
</div>
);
}
不应该是在useRef.current
发生变化时,里面的东西useEffect
就会运行吗?
我也知道我可以useState
在这里使用。这不是我要问的。而且我知道ref
在重新渲染期间保持参考不变,所以它不会改变。但我没有做类似的事情
const myRef = useRef(1);
useEffect(() => {
//...
}, [myRef]);
我将current
值放在 dep 列表中,因此应该会发生变化。
解决方案
https://reactjs.org/docs/hooks-reference.html#useref
请记住,当其内容发生变化时,useRef 不会通知您。改变 .current 属性不会导致重新渲染。如果你想在 React 将 ref 附加或分离到 DOM 节点时运行一些代码,你可能需要使用回调 ref 来代替。
推荐阅读
- javascript - 尝试在 iframe vid 结束后触发事件但出现错误
- forms - 发生验证错误时,我想在输入表单中显示错误值
- android - 流改造意外结束
- python - Python urlopen 不适用于每个网站
- ruby - RSpec:从命令行提供日志级别
- flutter - 在 Flutter 上快照到 Listview
- reactjs - React 中的 TradingVew 图表,代码不起作用
- python - Pandas 是否有一种 Pythonic 方法可以将新的分层列添加到平面列 Dataframe
- javascript - 正则表达式包括斜线
- c# - 使用带有unity3D的c#中的列表在3d蛇游戏中抖动运动