[英]Is there a way to pass a variable as an argument in onClick handler function in an element? - React JS
我正在尝试创建一个反应应用程序,该应用程序显示我使用反应完成的基本项目的列表。 我要存档的是,单击“单击我”按钮后,它应该将当前组件(默认组件)替换为数据数组中相应的反应组件(项目)。 代码 -
import React, { useState } from "react";
import Birthday from "./Birthday_src/Birthday";
import Tours from "./Tours_src/App";
const data = [
{
id: 1,
btn: <Birthday />,
},
{
id: 2,
btn: <Tours />,
},
];
export default function Container() {
const [project, setProject] = useState(Default);
function Default() {
return (
<>
<div className="container">
<h1>15 Basic React Projects. </h1>
<p>that are based on react...(obviously) </p>
<div className="row row-cols-3 mt-10 mx-3 ">
{data.map((cProject, index) => {
const { id, btnP } = cProject;
return (
<div className="items" key={id}>
<p>Here goes the first project. </p>
<button
className="btn-primary btn"
id={`btn${id}`}
onClick={(e,btnP) => {
console.log(e.target.id);
console.log(btnP)
setProject(btnP);
}}
>
Click me
</button>
</div>
);
})}
</div>
</div>
</>
);
}
return <>{project}</>;
}
但是单击按钮后,“e.target.id”工作得非常好(console.log 记录了各自的 id),但“btnP”显示为未定义。 我只需要以某种方式将当前的“btnP”发送到 useState,以便功能组件中的返回返回“项目”(用户想要显示的 JSX 反应元素,具体取决于他们单击的按钮.)
谢谢~iter8
问题是浏览器调用所有这些事件处理程序时只有一个参数 - 事件对象 - 所以如果你使用一个接受多个参数的事件处理程序,当函数被调用时,除了第一个参数之外的所有事件处理程序都不会被传入(通过浏览器本身),因此它们将获得值undefined
。
这里的解决方案非常简单,因为您要访问的btnP
已经在外部范围内可用(您用来map
data
的函数 - 此时您仍在其中)。 因此,如果您只是将函数签名从
(e,btnP) => {...}
至
(e) => {...}
这应该完全按照您的意图工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.