reactjs - 更新状态,而不将其设置为 useEffect 中的依赖项?详尽的 deps lint 规则

标签 reactjs eslint lint

我有一个页面状态,当它更新时,我想将新项目添加到另一个状态,在本例中是列表状态。

在下面的示例中,我使用 page 作为 useEffect 中的依赖项,但无法使用 list,因为它会导致无限循环。

  const [list, setList] = useState([1, 2, 3, 4]);
  const [page, setPage] = useState(1);

  useEffect(() => {
    const newList = ["a", "b", "c", "d"];
    setList(list.concat(newList));
  }, [page]);

尽管如此,这确实有效,但它会触发详尽的 deps lint 规则。我阅读了有关该规则的内容,并了解到让依赖项数组不包含所有已用值是一个坏主意,而且我真的不想只是禁用该规则。

在这种情况下更新页面时更新列表的正确方法是什么?

最佳答案

您应该使用setList的回调版本

  const [list, setList] = useState([1, 2, 3, 4]);
  const [page, setPage] = useState(1);

  useEffect(() => {
    const newList = ["a", "b", "c", "d"];
    setList(currentList => currentList.concat(newList));
  }, [page]);

关于reactjs - 更新状态,而不将其设置为 useEffect 中的依赖项?详尽的 deps lint 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67550469/

相关文章:

javascript - React 中的加载器

reactjs - 尽管来自 ESLint(react-hooks/exhaustive-deps) 发出警告,但依赖数组中的 React.useEffect : Component re-renders with window. location.pathname

javascript - ESlint:如何忽略解析错误:无效的正则表达式标志

c - lint 中强类型检查的问题(警告 632)

javascript - 在 Javascript 中的 API 调用之间使用 ASYNC/AWAIT 内的数组方法

javascript - Reactjs 根据检查的输入更改对象属性的状态

javascript - 此正则表达式方言不支持条件

android-studio - 在Android Studio中,如何更改Flutter的命名约定?

javascript - Codemirror 的 HTMLHint 验证器

javascript - 使用react计算javascript中两个日期之间的差异