我试图创建一组由React生成的按钮,从数组中提取id,标签和链接。通过className和.label, id和标签都可以工作。我不想为链接使用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)
)传递参数时,它会反复调用函数。我谷歌过了,这是预期行为。我怎样才能传递一个参数而不意外地调用函数呢?
如果这是一个愚蠢的问题-对不起:)
从你对问题的描述来看,我认为你想要做
onClick: () => linking( item.link )
onClick: linking
是完全有效的,它只是传递函数引用。这样使用时,它不会丢失任何参数。添加括号将调用函数现在,但你实际上希望它被调用,以响应用户点击按钮;它需要一个函数引用来做到这一点,因为它需要能够在事件发生时调用函数本身。使用onClick: linking(item.link)
将调用并执行该函数,并尝试将其返回值(未定义)赋值给onClick"属性(它不会做任何事情)。
另一方面,虽然onClick: linking
是有效的,但您的函数期望的值与将要接收的值不同:元素的单击事件处理程序使用MouseEvent
对象调用。
您可能想要传递另一个函数,该函数使用期望的值调用您的处理程序,可能沿着
行。onClick: () => linking(item.link)
这将创建一个新函数,该函数不接受任何参数(或者如果给出了一个参数,如事件对象,它将被忽略),而是在调用时使用给定的参数调用您的函数。
试试下面这段代码:
onClick: () => linking(item?.link)
或对于功能部件:
onClick={() => linking(item?.link)}