将附加参数传递给 React Ant Design Select 组件的 onSelect 方法

Posted

技术标签:

【中文标题】将附加参数传递给 React Ant Design Select 组件的 onSelect 方法【英文标题】:Pass additional params to onSelect method of React Ant Design Select component 【发布时间】:2021-06-25 06:04:56 【问题描述】:

我需要向 AntD Select 组件的 onSelect 方法传递一个附加参数,该参数不能在选项对象数组中列出。我试图通过映射一个数组在 UI 上呈现几个 Select 组件,并且需要将呈现元素的索引传递给 onSelect 方法。根据文档,它只支持从onSelect 方法读取valueoptions。有什么解决办法吗?

当前代码:

list.map(input, index) -> 
  return <Select 
          .....
          onChange=handleOnChange
          />


handelOnChange = (value, options) => 
  .....

预期代码:

list.map(input, index) -> 
  return <Select 
          .....
          onChange=handleOnChange(index)
          />

【问题讨论】:

你可以将任何你想要的传递给你的回调函数,你的第二个例子应该可以工作 【参考方案1】:

预期代码:

list.map(input, index) -> 
  return <Select 
          .....
          onChange=(value, options)=>handleOnChange(value, options, index)
          />

【讨论】:

【参考方案2】:

我正在为@Babak 答案添加一些解释。

在您当前的代码中,您将一个事件处理程序 (handleOnChange) 传递给 Select 组件的 onChange onEvent 属性。

<Select 
     .....
     onChange=handleOnChange
 />

当 onChange 事件发生时,它将调用函数handleOnChange,并将该事件作为默认参数和其他参数

在您预期的代码中,您传递了handleOnChange(index) 函数的结果(因为括号我们说它进行函数调用并将结果传递给onChange 属性),但这不是我们的意图。我们必须将事件处理程序传递给 onChange 属性而不是它的结果。这是 REACT 中事件处理程序的黄金法则。

如果你想传递事件参数以外的参数,那么你需要这样做:

<Select 
   ....
   onChange=(value, options) => handleOnChange(value, options, index)
 />

在这里你可以看到我们正在传递一个回调函数。请注意,在上面的 sn-p 中,我们无法访问 handleOnChange 中的事件。如果您想在事件处理程序中包含一个事件以及其他参数,您可以这样做:

<Select 
    .....
   onChange=(event, value, options) => handleOnChange(event, value, options, index)
/>

一些有效的事件处理程序:

<button onClick=handleClick /> // valid and can access event
<button onClick=() => handleClick() /> // valid and access event
<button onClick=(event) => handleClick(event, name) /> // valid and access event and other parameters

【讨论】:

感谢您的精彩解释。我认为这对所有访问这里的开发者都有帮助。

以上是关于将附加参数传递给 React Ant Design Select 组件的 onSelect 方法的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 将附加参数传递给函数

如何将附加参数传递给 jQuery DataTable ajax 调用?

Promises,将附加参数传递给 then 链

如何在不覆盖数据源参数的情况下将附加参数传递给剑道模板

角度 ngResource 将附加参数传递给 url

将附加参数传递给 jQuery each() 回调