开发者问题收集

我该如何修复 React useEffect 问题?

2021-06-01
431

我是 React 新手,最近我刚刚通过制作一个简单的购物车功能来练习 React

这是我收到错误的部分代码:

const MainShop = () => {
  const [products, setProducts] = useState([]);
  const [category, setCategory] = useState('');
  const [sort, setSort] = useState('');
  const [filteredProducts, setFilteredProducts] = useState([]);

  useEffect(() => {
    const fetchItems = async () => {
      const data = await fetch('https://fakestoreapi.com/products');
      const items = await data.json();
      console.log(items);
      setProducts(items);
      setFilteredProducts(products);
    };
    fetchItems();
  }, []);

错误内容: 第 42 行:6:React Hook useEffect 缺少依赖项:“products”。请添加它或删除依赖项数组。如果“setFilteredProducts”需要“products”的当前值,您还可以用 useReducer 替换多个 useState 变量 react-hooks/exhaustive-deps

我该如何解决这个问题?

1个回答

基本上,您应该首先了解什么是 useEffect 依赖项数组。此外,在您的问题中定义您正在使用的状态以及您从哪里获取 products ,这与获取的 items 有什么区别。如果它们不同,是否有必要将它们保存在同一个 useEffect 钩子中?请注意,您可以在一个具有不同依赖项数组的组件中拥有多个效果钩子

但是,作为一种快速破解,如果您希望在组件安装时仅触发一次获取,请禁用如下所示的依赖项错误。

useEffect(() => {
    const fetchItems = async () => {
      const data = await fetch('https://fakestoreapi.com/products');
      const items = await data.json();
      console.log(items);
      setProducts(items);
      setFilteredProducts(products);
    };
    fetchItems();
   // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

如果根据过滤器,则应再次触发获取

useEffect(() => {
    const fetchItems = async () => {
      const data = await fetch(`https://fakestoreapi.com/products?filter=${filters}`);
      const items = await data.json();
      console.log(items);
      setProducts(items);
      setFilteredProducts(products);
    };
    fetchItems();
  }, [filters]);
Amir-Mousavi
2021-06-01