【问题标题】:Button in table column doesn't wait for the onClick event [duplicate]表格列中的按钮不等待 onClick 事件 [重复]
【发布时间】:2019-08-02 18:29:13
【问题描述】:

我有一个表格,其中最后一列应该用作“删除项目”按钮。表格看起来像这样:

const columns = ({ onClick }) => [
  {
    key: 'type',
    onRender: (item) => (
      <p className="ms-font-m mb-0">
        {item.type}
      </p>
    ),
  },
  {
    key: 'remove',
    onRender: (item) => (
      <PrimaryButton onClick={onClick(item.type)}>
        <FormattedMessage {...messages.removeLight}/>
      </PrimaryButton>
    ),

  },
]

const Table = ({ data, onClick, intl}) => (
  <Table
    items={data}
    compact
    columns={columns({ onClick })}
  />
);

,其中 onClick 事件调用重写当前状态并设置新状态的函数,如下所示:

handleRemove = (type) => {
    const { form } = this.state

    var itemsNew = form.items.filter(e => e.type !== type),

    this.setState({
      form: itemsNew,
    });
  }

问题是,当表格被渲染时,handleRemove 函数会立即被调用并且不会等待点击事件。但是,如果我删除 item.type 参数并将 handleRemove 作为空函数调用,并且仅包含一些 console.log(...) 行,它就可以正常工作。

我对 JS 很陌生,真的不明白我在这里缺少什么。

【问题讨论】:

  • 您在渲染时直接调用onClick。给 onClick 属性一个函数。 onClick={() =&gt; onClick(item.type)}

标签: javascript reactjs styled-components


【解决方案1】:

只需更改此行 &lt;PrimaryButton onClick={onClick(item.type)}&gt;&lt;PrimaryButton onClick={() =&gt; onClick(item.type)}&gt;

另一种解决方案是将函数“形状”从这个handleRemove = (type) =&gt; {...} 更改为这个handleRemove = (type) =&gt; () =&gt; {...}

【讨论】:

  • 哇,真的错过了。谢谢!
  • @MartinDršata 很高兴为您提供帮助。如果它可以帮助您解决问题,请不要忘记将答案标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 2013-10-30
相关资源
最近更新 更多