我有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}
/>
答案 0 :(得分:3)
因为您的useEffect没有参数。如果将第二个参数作为空数组传递,则只有在安装组件时才会触发。
答案 1 :(得分:1)
您可以通过将block
属性作为您的useEffect
函数中的第二个参数来获得此行为:
const { block } = props;
useEffect(() => {
setTimeout(() => {
if (inputRef.current) {
inputRef.current.focus();
}
});
}, [block]);
别忘了您可以传递更多属性:
useEffect(() => {}, [block, otherProperty])