You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件通过Props传递带参数函数的实现方法

问题

我原本有一个带参数点击事件的下拉菜单,代码如下:

<div className="dropdown-container">
  <button className="dropdown-button"> Sort </button>
  <div className="dropdown-content">
    <button className="sort-button" onClick={() => changeFilter(['sort=-Covered_distance'])}> Furthest </button>
    <button className="sort-button" onClick={() => changeFilter(['sort=+Covered_distance'])}> Shortest </button>
    <button className="sort-button" onClick={() => changeFilter(['sort=-Duration'])}> Longest </button>
    <button className="sort-button" onClick={() => changeFilter(['sort=+Duration'])}> Fastest </button>
  </div>
</div>

为了复用,我把它封装成了Dropdown组件,但现在传递的changeFilter只能调用无参版本,没法传入对应参数:

<div className="filters-container">
  <Dropdown changeFilter={() => changeFilter()} />
</div>

请问怎么实现带参数的函数调用?


解决方案

方法1:直接传递原函数,在组件内部传参

父组件里直接把changeFilter函数本身传给Dropdown,不要包装成无参函数:

<div className="filters-container">
  <Dropdown changeFilter={changeFilter} />
</div>

然后在Dropdown组件内部的按钮点击事件里,直接调用传入的函数并带上参数:

const Dropdown = ({ changeFilter }) => {
  return (
    <div className="dropdown-container">
      <button className="dropdown-button"> Sort </button>
      <div className="dropdown-content">
        <button className="sort-button" onClick={() => changeFilter(['sort=-Covered_distance'])}> Furthest </button>
        <button className="sort-button" onClick={() => changeFilter(['sort=+Covered_distance'])}> Shortest </button>
        <button className="sort-button" onClick={() => changeFilter(['sort=-Duration'])}> Longest </button>
        <button className="sort-button" onClick={() => changeFilter(['sort=+Duration'])}> Fastest </button>
      </div>
    </div>
  );
};

方法2:将选项数据作为props传入,提升组件复用性

如果需要让Dropdown组件适配不同的下拉选项,可以把选项数据单独抽出来作为props传递,这样同一个组件可以生成不同的下拉菜单:

父组件中定义选项并传递:

// 定义排序选项
const sortOptions = [
  { label: 'Furthest', value: ['sort=-Covered_distance'] },
  { label: 'Shortest', value: ['sort=+Covered_distance'] },
  { label: 'Longest', value: ['sort=-Duration'] },
  { label: 'Fastest', value: ['sort=+Duration'] }
];

<div className="filters-container">
  <Dropdown 
    changeFilter={changeFilter} 
    options={sortOptions} 
    buttonText="Sort" 
  />
</div>

Dropdown组件动态渲染按钮:

const Dropdown = ({ changeFilter, options, buttonText }) => {
  return (
    <div className="dropdown-container">
      <button className="dropdown-button">{buttonText}</button>
      <div className="dropdown-content">
        {options.map((option, idx) => (
          <button 
            key={idx} 
            className="sort-button" 
            onClick={() => changeFilter(option.value)}
          >
            {option.label}
          </button>
        ))}
      </div>
    </div>
  );
};

内容的提问来源于stack exchange,提问作者iispar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:01:55