为什么我的 setInterval 在 React hooks 中只运行一次?

Cha*_*ing 6 setinterval reactjs react-hooks

为什么这段代码只触发 setInterval 一次然后就停止了......

const MainBar = ()=> {

  const [clock, setClock] = useState("")

  useEffect(() => {
    const interval = setInterval(setClock(clockUpdate()), 1000);
    console.log('Im in useEffect', clock)
  });

...
Run Code Online (Sandbox Code Playgroud)

而将它传递给另一个函数使它每秒都像这样工作?

const MainBar = ()=> {

  const [clock, setClock] = useState("")

  useEffect(() => {
    const interval = setInterval(()=>{setClock(clockUpdate())}, 1000);
    console.log('Im in useEffect', clock)
  });

...
Run Code Online (Sandbox Code Playgroud)

抱歉,我是 hooks 和 javascript 新手。

Car*_*iel 4

setInterval需要传递一个函数才能执行。在这种情况下,它将每秒执行给定的函数。() => { setClock(clockUpdate()) }实际上是一个匿名函数;没有名称的函数。如果你给它一个合适的名字,它看起来像function updater() { setClock(clockUpdate()); }.

setInterval(setClock(clockUpdate()), 1000)不起作用,因为setClock(clockUpdate())甚至在传递给 之前就已经执行了setInterval。它无法安排它再次运行,因为它不是一个函数,它已经是一个结果。