javascript - 将 react Hook 设置为导致循环的数组

标签 javascript reactjs

有没有其他人注意到这种奇怪的行为?

似乎当我在 useState Hook 中声明一个设置 Hook 到数组的函数时,我得到了一个无限循环。

但是将相同的钩子(Hook)设置为空字符串不会导致循环。

import React, { useState, useEffect } from "react";
import "./App.css";

function App() {
  const [foo, setFoo] = useState([]);
  

  useEffect(() => {
    console.log("useEffect")
    FooFunction()
  },[foo]);

  function FooFunction () {
    // If you setFoo with an array we can an infinite loop
    setFoo('')
    // setFoo([1,2,3])
  }

  return <div className="App">Whats up with this loop?</div>;
}

export default App;

最佳答案

数组是引用类型。通过将 foo 设置为一个数组,您正在创建一个新的引用。这意味着您在 useEffect 中对 foo 的依赖性发生了变化。依赖项中的任何更改都会触发组件的重新渲染。

当您使用 setFoo('') 时,字符串按值进行比较(例如 '' === '' 为真),因此您的依赖关系不会改变在那种情况下。

关于javascript - 将 react Hook 设置为导致循环的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63747739/

相关文章:

reactjs - 使用react-admin创建教程应用程序时,不应在<Router>错误之外使用<Link>

javascript - 使用javascript从数组中删除一个对象?

javascript - 如何使用工具栏打开弹出窗口

用于检测旧版 Internet Explorer 并提供下载较新浏览器的 Javascript

javascript - 移动网络按钮上的 Js 事件

reactjs - 传递 Prop 时,react-google-maps map 未更新,更新时标记落后一个位置

javascript - Shadow DOM 中的 React 组件时单击事件不会触发

javascript - TypeScript 无法编译 - 发现错误附加的项目

javascript - 在单个选项上使用 onClick 事件响应语义 UI DropDown

javascript - 手机浏览器怎么显示 'page zoom'