如何将父母的 Api id 传递给我的孩子?

Posted

技术标签:

【中文标题】如何将父母的 Api id 传递给我的孩子?【英文标题】:How can I pass the Api id from my parents to my child? 【发布时间】:2021-04-12 00:19:55 【问题描述】:

我是初学者。提前感谢您分享您的知识。

我成功带上Api并在屏幕上显示了。

接下来,我想将“idDrink”从 Api 的参数传递到子组件。

因为我必须在子组件中使用 'idDrink' 将点击图片的 ID 交给 URL。

我们最初设置了一个使用“路由器”转到另一个页面的设备。

但我决定制作 Modal 而不是转到另一个页面。

这里有问题。

'useParams' 让接管 id 和导入 API 数据变得容易。

但我想要一个模态。我以为我不需要“Router”,因为“modal”不需要地址。

如果我错了,请告诉我。请告诉我如何解决这个问题。

这是 Main.jsx 文件

import React from "react";
import styled from "styled-components";
import  useState, useEffect  from "react";
import Search from "./Search";
import Modal from "../Components/Modal";
import Portal from "../Components/Portal";

const Main = () => 
  const url = "https://www.thecocktaildb.com/api/json/v1/1/random.php";
  const [data, setData] = useState([]);
  const [loading, setLoading] = useState(true);
  const [open, setOpen] = useState(false);

  async function fetchUrl() 
    const response = await fetch(url);
    const json = await response.json();
    setData(json);
    setLoading(false);
  
  useEffect(() => 
    fetchUrl();
  , []);

  const handleOpen = () => 
    setOpen(true);
    console.log("open Modal");
  ;
  const handleClose = () => 
    setOpen(false);
    console.log("close Modal");
  ;

  return (
    <Wrapper className="main">
      loading ? (
        "Loading..."
      ) : (
        <>
          data.drinks.map(
           This params ???? ( idDrink, strDrink, strAlcoholic, strGlass, strDrinkThumb ) => (
              <>
                <Container onClick=handleOpen>
                  <img src=`$strDrinkThumb` alt=`$strDrink` />
                  <div key=`$idDrink`>`$strDrink`</div>
                </Container>
                open && (
                  <Portal> 
                    <Modal key=`$idDrink` onClose=handleClose /> ???? I want to hand over here.
                  </Portal>
                )
              </>
            )
          )
        </>
      )
      <Search />
    </Wrapper>
  );
;
export default Main;

这是子组件文件 Modal.jsx

import React,  useState, useEffect  from "react";
import axios from "axios";
import styled from "styled-components";

const Modal = ( onClose, idDrink ) => 
  const [data, setData] = useState([]);

  useEffect(() => 
    let url = `https://www.thecocktaildb.com/api/json/v1/1/lookup.php?i=$idDrink`;
    axios
      .get(url)
      .then((res) => 
        setData(res.data.drinks);
      )
      .catch((error) => 
        console.log(error);
      );
  , [idDrink]); 
  return (
    <MyModals onClick=onClose>
      <Content>Detail</Content>
    </MyModals>
  );
;

export default Modal;

我之所以实现这个功能,是因为每次点击都会改变的Api地址。

请帮帮我。

【问题讨论】:

【参考方案1】:

如果我没记错的话,你想在你的 Modal 组件中传递 idDrink 的值。

使用

&lt;Modal idDrink=idDrink onClose=handleClose /&gt;

而不是&lt;Modal key=`$idDrink` onClose=handleClose /&gt;

在你的父组件中。 希望您能够从 Modal 访问 idDrink。

【讨论】:

【参考方案2】:
    使用&lt;Modal id_Drink=idDrink onClose=handleClose /&gt; 在模态中添加道具:const Modal = (props) => 在您的模态中访问 idDrink:props.id_Drink , 在您的模态中访问句柄关闭:props.onClose()

【讨论】:

以上是关于如何将父母的 Api id 传递给我的孩子?的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS:在孩子和父母之间传递数据[重复]

C 传递父线程 ID

React:将状态从孩子传递到孩子再传递给父母

如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?

从父母到孩子的传递数据

将数据从孩子传递给祖父母