Ant Design - prevent table row click in specific column/area

liron_e picture liron_e · Mar 23, 2017 · Viewed 11.4k times · Source

I'm using ant design table component. I have "actions" column that I don't want the onRowClick event will trigger in this column.

How can it be done?

http://codepen.io/liron_e/pen/zZjVKZ?editors=001

const { Table, Modal } = antd;

const confirm = (id) => {
  Modal.confirm({
    title: 'Confirm',
    content: 'Bla bla ...',
    okText: 'OK',
    cancelText: 'Cancel',
  });
};

const info = (id) => {
  Modal.info({
    title: 'Info',
    content: 'Bla bla ...',
    okText: 'OK',
    cancelText: 'Cancel',
  });
};

const columns = [
  {
    key: 'status',
    title: 'text',
    dataIndex: 'text'
  }, {
    key: 'actions',
    title: 'actions',
    dataIndex: 'id',
    render: (id) => {
      return (
        <span>
          <a href="#" onClick={() => confirm(id)}>
            Clone
          </a>
          <span className="ant-divider" />
          <a href="#" onClick={() => confirm(id)}>
            Replace
          </a>
        </span>
      );
    }
  }
];

 const dataSource = [
   {
     id: '1',
     text: 'Hello'
   },{
     id: '123',
     text: 'adsaddas'
   },{
     id: '123344',
     text: 'cvbbcvb'
   },{
     id: '5665',
     text: 'aasddasd'
   },
 ];


ReactDOM.render(
  <div>
    <Table 
      columns={columns}
      onRowClick={() => this.info()}
      dataSource={dataSource}
    />
  </div>
, mountNode);

As you can try when pressing on row the info modal would open. When pressing some action the info and the confirm modals would open, and I would like that only confirm modal would open.

Thanks (:

Answer

Marcos Gin picture Marcos Gin · Apr 26, 2019

In your render function:

render: (id) => {
  return (
    <span>
      <a href="#" onClick={(e) => { 
           e.stopPropagation();      
           confirm(id);
          }}>
        Clone
      </a>
      <span className="ant-divider" />
      <a href="#" onClick={() => confirm(id)}>
        Replace
      </a>
    </span>
  );
}