将道具从一个组件传递到另一个组件,但返回未定义的

发布于 2025-01-26 03:25:26 字数 3117 浏览 1 评论 0原文

这是我的库存。js文件,我在其中绘制并将其详细介绍为props

数据流,就像

neventory.js>>>>详细信息。 product.js

,但我不知道该如何解决此错误。在product.js中变得不确定,但其他工作发现。

我获取所有数据的自定义挂钩。

useproducts.js

const baseURL = "http://localhost:5000/inventory";

const useProducts = () => {

  const [products, setProducts] = useState([])

  useEffect(() => {
    axios.get(`${baseURL}`).then((res) => {
      setProducts(res.data);
      // console.log(setProducts)
    });
  }, []);

  return [products, setProducts]
};

inting.js

const Inventory = () => {
  const [products, setProducts] = useProducts([]);
  // console.log(products)
  return (
    <div>
      <div className="products-container">
        {products.map((product) => (
          <Detail key={product._id} product={product}/>
        ))}
      </div>
    </div>
  );
};

export default Inventory;

它正常工作,这是我的详细

const Detail = (props) => {
  const { _id, name, description, price, supplier_name, url, quantity } = props.product;

  const navigate = useNavigate();

  const goProduct = (id) => {
    navigate(`/inventory/${id}`);
    console.log("Product clicked")
    console.log(props.product);
  };

  return (
    <div>
      <div className="product-contrainer">
        <div className="product-card">
          <img src={url} className="product-image" id="image-product" alt="" />
          <h4 className="product-title">Product Name: {name}</h4>
          <p className="product-text price">Price: {price}$</p>
          <div className="buttons justify-content-evenly">
            <button
              className="custom-btn btn-16"
              onClick={() => goProduct(_id)}
              product={props.product}
            >
              Detail
            </button>
            <button className="buttons-section order custom-btn btn-14">
              Order
            </button>
          </div>
        </div>
      </div>
    </div>
  );
};

export default Detail;

信息 对于另一个称为product(product.js)的组件,这是代码,但它返回未定义。 制作了动态路线

我为那个 product.js

const Product = (props) => {

  const {name, description, price, supplier_name, url, quantity} = props.props.product;
  
  return (
    <div>
      <div className="product-contrainer">
        <img src={url} className="product-image" alt="" />
        <h4 className="product-title">Product Name: {name}</h4>
        <p className="product-text description">Description: {description} </p>
        <p className="product-text suplier">Suplier: {supplier_name}</p>
        <p className="product-text quantity">Quantity: {quantity}</p>
        <p className="product-text price">Price: {price}$</p>
      </div>
    </div>
  );
};

export default Product;

This is my Inventory.js file where I map through and pass it in Detail component as a props

Data flow be like

Inventory.js >>> Detail.js >>> Product.js

But I don't know how can I solve this error. Getting undefined in product.js but others working find.

My Custom hook where I am getting all data.

useProducts.js

const baseURL = "http://localhost:5000/inventory";

const useProducts = () => {

  const [products, setProducts] = useState([])

  useEffect(() => {
    axios.get(`${baseURL}`).then((res) => {
      setProducts(res.data);
      // console.log(setProducts)
    });
  }, []);

  return [products, setProducts]
};

Inventory.js

const Inventory = () => {
  const [products, setProducts] = useProducts([]);
  // console.log(products)
  return (
    <div>
      <div className="products-container">
        {products.map((product) => (
          <Detail key={product._id} product={product}/>
        ))}
      </div>
    </div>
  );
};

export default Inventory;

Which is working perfectly and this my Detail.js code

Detail.js

const Detail = (props) => {
  const { _id, name, description, price, supplier_name, url, quantity } = props.product;

  const navigate = useNavigate();

  const goProduct = (id) => {
    navigate(`/inventory/${id}`);
    console.log("Product clicked")
    console.log(props.product);
  };

  return (
    <div>
      <div className="product-contrainer">
        <div className="product-card">
          <img src={url} className="product-image" id="image-product" alt="" />
          <h4 className="product-title">Product Name: {name}</h4>
          <p className="product-text price">Price: {price}
lt;/p>
          <div className="buttons justify-content-evenly">
            <button
              className="custom-btn btn-16"
              onClick={() => goProduct(_id)}
              product={props.product}
            >
              Detail
            </button>
            <button className="buttons-section order custom-btn btn-14">
              Order
            </button>
          </div>
        </div>
      </div>
    </div>
  );
};

export default Detail;

Now I want to pass that same prop data to another component called Product(Product.js) and here is the code but it returns undefined. I made dynamic routes for that

Product.js

const Product = (props) => {

  const {name, description, price, supplier_name, url, quantity} = props.props.product;
  
  return (
    <div>
      <div className="product-contrainer">
        <img src={url} className="product-image" alt="" />
        <h4 className="product-title">Product Name: {name}</h4>
        <p className="product-text description">Description: {description} </p>
        <p className="product-text suplier">Suplier: {supplier_name}</p>
        <p className="product-text quantity">Quantity: {quantity}</p>
        <p className="product-text price">Price: {price}
lt;/p>
      </div>
    </div>
  );
};

export default Product;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

给妤﹃绝世温柔 2025-02-02 03:25:26

您没有在详细信息中创建product作为JSX组件,但是您正在导航到创建product的组件。因此,您可以在导航期间使用路由参数,并以此方式传递所需的数据。

const goProduct = (id) => {
    navigate(`/inventory/${id}`, {state: props.product});
};

在您的产品组件中,您可以按以下方式访问它们。

const Product = () => {
  const location = useLocation();
  const {name, description, price, supplier_name, url, quantity} = location.state
}

You are not creating the Product as a JSX component in Detail, but you are navigating to a component that creates Product. Therefore, you can use the route params during navigation and pass the desired data this way.

const goProduct = (id) => {
    navigate(`/inventory/${id}`, {state: props.product});
};

In your Product component, you can access them as follows.

const Product = () => {
  const location = useLocation();
  const {name, description, price, supplier_name, url, quantity} = location.state
}
肥爪爪 2025-02-02 03:25:26

基于您的代码,我看不到product组件将如何在详细信息组件中使用。但是这里的问题很可能是这样的行:

const {name, description, price, supplier_name, url, quantity} = props.props.product;

您应该以这种方式访问​​它:

const {name, description, price, supplier_name, url, quantity} = props.product;

因为props.product作为属性作为属性传递到product中,如此行:

            <button
              className="custom-btn btn-16"
              onClick={() => goProduct(_id)}
              product={props.product}
            >

因此组件现在是props.product

Based on your code, I can't see how the Product component will be used in the Details component. But the problem here is most probably this line:

const {name, description, price, supplier_name, url, quantity} = props.props.product;

You should access it this way:

const {name, description, price, supplier_name, url, quantity} = props.product;

Because props.product is passed as a property into product as in this line:

            <button
              className="custom-btn btn-16"
              onClick={() => goProduct(_id)}
              product={props.product}
            >

So within the component it is now props.product

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文