我有useEffect,但我不明白为什么在更改道具但调用render时不调用useEffect。我有这样的东西,“块”是对象:
const { block } = props;
useEffect(() => {
setTimeout(() => {
if (inputRef.current) {
inputRef.current.focus();
}
});
}, []);
谢谢您的帮助!现在,我有下一个问题)当更改块并调用render时,我的inputRef为null:
const { block } = props;
const inputRef = useRef(null);
useEffect(() => {
setTimeout(() => {
if (inputRef.current) {
inputRef.current.focus();
}
});
}, [block, inputRef]);
...
<SomeComponent
inputRef={inputRef}
/>
因为您的useEffect没有参数。如果将第二个参数作为空数组传递,则仅在安装组件时才会触发。
您可以通过在block
函数中传递useEffect
属性作为第二个参数来获得此行为:
const { block } = props;
useEffect(() => {
setTimeout(() => {
if (inputRef.current) {
inputRef.current.focus();
}
});
}, [block]);
不要忘记,您可以传递更多属性:
useEffect(() => {}, [block, otherProperty])