【问题标题】:How to pass props from one Component to another component with onClick() event in React.js如何在 React.js 中使用 onClick() 事件将道具从一个组件传递到另一个组件
【发布时间】:2022-01-19 16:03:47
【问题描述】:

需要快速帮助!我有两个 React 组件 Vendors 和 VendorsList。在 Vendors.js 组件中,我有 asset.asset_name 以表格格式呈现的文本。我想要的是,当我点击我的 asset.asset_name 时,我想将它的值从 Vendors 组件传递给 VendorsList 组件。我怎么能这样做?

这是两个组件的代码

Vendors.js

import React, { useEffect, useState } from "react";
import { axios } from "axios";

const Vendors = () => {
  const [data, setData] = useState({});
  const baseURL =
    "http://127.0.0.1:8000/api/business_process/business-impact/bussiness-assets-detail";

  useEffect(() => {
    axios
      .get(baseURL)
      .then((response) => {
        setData(response.data);
      })
      .then(
        (response) => {},
        (err) => {
          alert("No Data To Show");
        }
      )
      .catch((err) => {
        return false;
      });
  }, []);
  const DisplayData = data.business_assets?.map((asset) => {
    return (
      <tr>
        <td>{asset.business_assets}</td>
        <td onClick={() => alert(asset.asset_name)}>{asset.asset_name}</td>
      </tr>
    );
  });
  return <div></div>;
};

export default Vendors;

这里是 VendorsList.js

    import React from "react";
const VendorsList = () => {
  return (
    <div>
      <h1>{foo}</h1>
    </div>
  );
};

export default VendorsList;

当我点击 Vendors 中的 asset.asset_name 值时,我需要将 asset.asset_name 值传递给 VendorsList强>组件

【问题讨论】:

  • 抱歉,您能发布一下您实际上是如何将asset_name 传递到VendorsList 的吗?您的Vendors 组件实际上并没有呈现DisplayData 或VendorList。问题可能是由于您将 asset_name 错误地传递给 VendorsList 组件
  • 我没有将asset_name 传递给VendorsList。我刚刚编辑了 VendorsList.js。你现在能看到吗?谢谢@ThungPham

标签: javascript arrays reactjs


【解决方案1】:

我认为您根本没有将 asset_name 传递到您的 VendorsList 组件中。我认为最快的方法是直接在你的Vendors 组件中渲染VendorsList,方法是将它放在你的Vendors 组件的返回中。您还需要一些东西来记录您单击的内容,以便您可以为此使用另一个 useState。以下是您如何实现这一目标:

将您的Vendor.js 修改为如下所示:

import React, { useEffect, useState } from "react";
import { axios } from "axios";
import VendorsList from '<path to your VendorList component>'

const Vendors = () => {
  const [data, setData] = useState({});
  const [clickedAsset, setClickedAsset] = useState()
  const baseURL =
    "http://127.0.0.1:8000/api/business_process/business-impact/bussiness-assets-detail";

  useEffect(() => {
    axios
      .get(baseURL)
      .then((response) => {
        setData(response.data);
      })
      .then(
        (response) => {},
        (err) => {
          alert("No Data To Show");
        }
      )
      .catch((err) => {
        return false;
      });
  }, []);
  const DisplayData = data.business_assets?.map((asset) => {
    return (
      <tr>
        <td>{asset.business_assets}</td>
        <td onClick={() => setClickedAsset(asset.asset_name)}>{asset.asset_name}</td>
      </tr>
    );
  });
  return (
      <div>
          <DisplayData/>
          <VendorList clickedAssetName={clickedAsset}/>
      </div>
  );
};

export default Vendors;

然后要使用您刚刚传递的clickedAssetName,在您的VendorsList.js 组件中像这样访问它:

import React from "react";
const VendorsList = ({clickedAssetName}) => {
  return (
    <div>
      <h1>{clickedAssetName}</h1>
    </div>
  );
};

export default VendorsList;

【讨论】:

  • 我在运行此代码时从 VendorsList 获得了 undefined。请问你能帮帮我吗? @TungPham
  • @TeshieEthiopia 抱歉,没有看到您回复,您是点击后未定义还是刚开始显示未定义?您必须单击按钮才能正确设置值。
  • 如何使用 redux 传递这个?因为不可能将 useState 值直接传递给另一个组件。你能告诉我如何使用 redux 来实现吗?谢谢
  • @TeshieEthiopia 所以如果你想使用redux,你可以使用useSelectorhooks获取值,useDispatch调度action来修改redux状态。 IMO,这超出了您原始问题的范围,因此我建议您查看文档,自己尝试一下,如果您遇到困难,可以在此处发布另一个问题,以便人们可以提供帮助。
猜你喜欢
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多