为什么不调用useEffect,在更改道具后调用render?

时间:2019-12-26 21:57:23

标签: javascript reactjs

我有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}
 />

2 个答案:

答案 0 :(得分:3)

因为您的useEffect没有参数。如果将第二个参数作为空数组传递,则只有在安装组件时才会触发。

Here is a reference from the official docs

答案 1 :(得分:1)

您可以通过将block属性作为您的useEffect函数中的第二个参数来获得此行为:

const { block } = props;

useEffect(() => {
    setTimeout(() => {
        if (inputRef.current) {
            inputRef.current.focus();
        }
    });
}, [block]);

别忘了您可以传递更多属性:

useEffect(() => {}, [block, otherProperty])