reactjs 如何将参数传递给嵌套在react.createElement()中的函数

htrmnn0y  于 2023-04-05  发布在  React
关注(0)|答案(3)|浏览(149)

我尝试创建一组由React生成的按钮,从数组中拉取ID,标签和链接。ID和标签,通过className和.label,都可以工作。我不想使用href:对于链接,我想调用一个函数(使用onClick),它使用传递到.createElement中的参数组装链接().不幸的是,当react渲染任何具有带括号功能的元素时它不断地调用函数。有没有什么方法可以将参数传递到.createElement中的onClick调用的函数中?我想使用JSX -我致力于此。createElement的值。
.createElement()的伪代码:

return (React.createElement("div", { key: item.id, className: "dummyClassObject"},
                React.createElement("span", { className: "dummyClassLabel" }, item.label)));

示例函数:

function linking(link) {
console.log("Redirecting to" + " " + link);
window.open(link);
}

当我将onClick: linking附加到div元素时,它工作正常(除了缺少一个参数)。当我尝试以传统方式(linking(item.link))传递参数时,它会重复调用函数。我确实google了这一点-这是预期的行为。还有什么方法可以在不意外调用函数的情况下传递参数?
如果这是一个愚蠢的问题-对不起:)

fslejnso

fslejnso1#

从你对问题的描述来看,我认为你想做的是

onClick: () => linking( item.link )
3htmauhk

3htmauhk2#

onClick: linking是完全有效的,它只是传递函数引用。这样使用时不会丢失任何参数。添加括号将调用函数 now,但实际上您希望它在响应用户单击按钮时被调用;它需要一个函数引用,因为它需要能够在事件发生时调用函数本身。使用onClick: linking(item.link)将调用并执行函数,并尝试将其返回值(未定义)分配给“onClick”属性(这不会做任何事情)。
另一方面,虽然onClick: linking是有效的,但您的函数期望的值与它将要接收的值不同:一个元素的click事件处理器是用一个MouseEvent对象调用的。
您可能需要传递另一个函数,该函数使用预期值调用处理程序,可能是沿着

onClick: () => linking(item.link)

这将创建一个新函数,该函数不接受任何参数(或者如果给定了一个参数,如事件对象,它将被忽略),而是在调用时使用给定的参数调用函数。

ar5n3qh5

ar5n3qh53#

尝试以下代码:

onClick: () => linking(item?.link)

或者,对于功能组件:

onClick={() => linking(item?.link)}

相关问题