【问题标题】:How do i fix the react useEffect problem?我如何解决 react useEffect 问题?
【发布时间】:2021-08-19 07:39:44
【问题描述】:

我是 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' react-hooks/exhaustive-deps 的当前值,您还可以用 useReducer 替换多个 useState 变量

我该如何解决这个问题?

【问题讨论】:

  • 这取决于您希望useEffect 回调运行的频率。
  • setFilteredProducts(products) - 但我们想在这里做什么。这应该类似于setFilteredProducts(items.filter(based on some condition))

标签: reactjs react-hooks


【解决方案1】:

基本上,你应该首先了解什么是useEffect Dependency Array。同样在您的问题中定义您正在使用的状态以及您在哪里获得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]);

【讨论】:

  • 感谢您的回答,我想首先我会深入研究 useEffect 和依赖数组
猜你喜欢
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2021-12-28
  • 2020-10-29
  • 2021-04-06
  • 2021-11-14
相关资源
最近更新 更多