在挂载时使用 Effect 依赖警告

use Effect dependency warning on mounting

我只想在页面呈现时使用 useEffect 一次,但它会警告我将 todos 作为参数添加到我的 effect,如果我这样做,它将运行 每次 todos 状态改变时。 我该如何解决?

  useEffect(() => {
    if (localStorage.getItem("todos") === null) {
      localStorage.setItem("todos", JSON.stringify([]));
    } else {
      let localTodos = localStorage.getItem("todos", JSON.stringify(todos));
      console.log(localTodos);
    }
  }, []);

这是由于在您的 useEffect 代码中使用了待办事项,只是一个警告,您可以忽略它或将其添加到依赖项并使用 if 语句

useEffect(() => {
if (your condition to run this code once){
    if (localStorage.getItem("todos") === null) {
      localStorage.setItem("todos", JSON.stringify([]));
    } else {
      let localTodos = localStorage.getItem("todos", JSON.stringify(todos));
      console.log(localTodos);
    }
}
  }, [todos]);

您可以使用自定义 useLocalStorage 挂钩。其工作方式类似于 useState,但如果提供的本地存储密钥存在,它将从本地存储获取其初始状态。

https://usehooks.com/useLocalStorage/

并非所有的警告都应该被忽略,但这个可以,所以只需在您的代码中添加该注释,它就会删除该行的警告。

useEffect(() => {
    if (localStorage.getItem("todos") === null) {
      localStorage.setItem("todos", JSON.stringify([]));
    } else {
      let localTodos = localStorage.getItem("todos", JSON.stringify(todos));
      console.log(localTodos);
    }
 // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);