首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在错误消息中,'componentMounted变量从内部反应,钩子useEffect将在每次呈现后丢失‘是什么意思?

在错误消息中,'componentMounted变量从内部反应,钩子useEffect将在每次呈现后丢失‘是什么意思?
EN

Stack Overflow用户
提问于 2022-10-16 13:12:17
回答 2查看 29关注 0票数 0

实际上,我试图在加载诸如男装、女装等按钮后获取API数据,但只显示了“加载”。按钮不显示。

当我尝试在componentMounted中初始化‘useEffect’时,所有的错误都会被删除,但是按钮不会显示。

代码语言:javascript
复制
import React, { useState, useEffect } from "react";

const Products = () => {
  const [data, setData] = useState([]);
  const [filter, setFilter] = useState(data);
  const [loading, setLoading] = useState(false);
  let componentMounted = true;

  useEffect(() => {
    const getProducts = async () => {
      setLoading(true);
      const response = await fetch("https://fakestoreapi.com/products");
      if(componentMounted) {
        setData(await response.clone().json());
        setFilter(await response.json());
        setLoading(false);
        console.log(filter);
      }
      return () => {
        componentMounted = false;
      }

    }

    getProducts();
  });

  const Loading = () => {
    return (<>Loading...</>);
  };

  const ShowProducts = () => {
    return (
      <>
        <div className="button">
          <button className="btn btn-outline-dark me-2">All</button>
          <button className="btn btn-outline-dark me-2">Men's Clothing</button>
          <button className="btn btn-outline-dark me-2">Women's Clothing</button>
          <button className="btn btn-outline-dark me-2">Jewelery</button>
          <button className="btn btn-outline-dark me-2">Electronics</button>
        </div>
      </>
    );
  };

  return (
    <>
      <div className="container my-5">
        <div className="row">
          <div className="col-12">
            <h1 className="display-6 fw-bolder text-center">Latest Products</h1>
            <hr />
          </div>
        </div>
        <div className="row justify-content-center">
          {loading ? <Loading /> : <ShowProducts />}
        </div>
      </div>
    </>
  );
};

export default Products;

错误信息是:

“在每次呈现后,从内部分配给'componentMounted‘变量React都会丢失。要保存该值,请将其存储在useRef钩子中,并将可变值保存在'.current’属性中。否则,可以将该变量直接移动到useEffect中。”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-16 13:29:33

它无法工作,因为没有提供依赖数组。如果没有提供依赖数组,那么组件将在无限循环中重新呈现。其次,为了使用卸载功能,您必须使用useEffect的返回函数。

您可以找到固定的示例这里

票数 0
EN

Stack Overflow用户

发布于 2022-10-16 13:23:45

这是因为您忘记添加应该为空的依赖项数组一次,并且您可以在不需要时删除componentMounted,您的useEffect将如下所示:

代码语言:javascript
复制
useEffect(() => {
  const getProducts = async () => {
    setLoading(true);
    const response = await fetch("https://fakestoreapi.com/products");
    setData(await response.clone().json());
    setFilter(await response.json());
    setLoading(false);
    console.log(filter);
  };

  getProducts();
}, []);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74087402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档