在ReactJS中使用迭代时如何将onClick事件传递给父组件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ReactJS中使用迭代时如何将onClick事件传递给父组件?相关的知识,希望对你有一定的参考价值。

我想在点击事件后删除表格行。我已经创建了迭代并显示删除按钮,但不知道在我的情况下如何将onClick事件从父组件传递给子组件。我尝试将const row更改为component并像往常一样传递onClick,但这种方法会破坏我的表格。

父组件:

class Home extends Component {
 constructor(props) {
 super(props);
 this.state = { data: []};
}

handleDelete{
 alert('here I want to have code to remove row from table')
}

render() {
 return (
  <div>
    <TableTasks data={this.state.data} header={[{ name: "No"}, { name: "Delete" }]} />
  </div>
);
}}

子组件:

const row = (props, i) =>
<TableRow key={`thr-${i}`}>
  <TableRowColumn>
    {props.nameTask}
  </TableRowColumn>
  <TableRowColumn className="DeleteButton">
    <IconButton>
      <DeleteIcon onClick={?????}/>
    </IconButton>
  </TableRowColumn>
</TableRow>;

export const TableTasks = ({ data, header }) => 
<Table>
 <TableHeader>
  <TableRow>
    {header.map((x, i) =>
      <TableHeaderColumn key={`thc-${i}`}>
        {x.name}
      </TableHeaderColumn>
    )}
  </TableRow>
 </TableHeader>
 <TableBody>
  {data.map((x, i) => row(x, i))}
 </TableBody>
</Table>;
答案

脚步:

1-将handleDelete函数从父级传递给子级TableTasks组件:

<TableTasks handleDelete={this.handleDelete}  .... />

2-在父母中定义handleDelete

handleDelete(){....}

3- handleDelete将在TableTasks组件内部提供,其结构与数据类似:

export const TableTasks = ({ data, header, handleDelete }) => {...}

4-现在将handleDelete传递给row函数:

{data.map((x, i) => row(x, i, handleDelete))}

5-现在handleDelete将可用:

const row = (props, i, handleDelete) => {
   console.log('handleDelete', handleDelete);
   return (
       ....
       <DeleteIcon onClick={handleDelete} />
       ....
   )
}

以上是关于在ReactJS中使用迭代时如何将onClick事件传递给父组件?的主要内容,如果未能解决你的问题,请参考以下文章

Reactjs:在onClick方法中传递参数而不会造成性能损失[重复]

如何将 onclick 事件添加到 reactjs 中由 dangerouslysetInnerHtml 呈现的字符串?

如何在 ReactJS Typescript 中 2 分钟后自动发生 onclick

如何在innerHTML中使用onClick函数

我只想在 reactjs 中更改单击按钮(onClick)的变体或背景。我怎样才能实现它?

Reactjs 触发 onClick 函数而不点击功能组件