reactjs - 使用回调将按钮向下传递给组件
问题描述
如果我有一个由行组成的表格,并且我的表格容器想要将按钮向下传递到表格但自己处理点击怎么办?请参阅下面的未经测试的代码来说明这种情况。如果我这样做,它不会起作用,因为data-employee
会变得很[object Object]
明显。我将如何传递按钮,同时确保 EmployeeTable 能够将员工附加到按钮?
class TableContainer extends React.Component {
constructor(props) {
super(props);
}
rowButtonClick(e) {
// Get the employee from onClick event somehow
}
render () {
let rowButtons = [
employee => (<button onClick={this.rowButtonClick} data-employee={employee}>View</button>),
employee => (<button onClick={this.rowButtonClick} data-employee={employee}>Delete</button>)
]
return (
<EmployeeTable rowButtons={rowButtons} />
);
}
}
class EmployeeTable extends React.Component {
/** Fetches it's own employees in state **/
render () {
return (
<table>
{this.state.employees.map((employee, key) => {
<tr>
<td>{employee.name}</td>
<td>
{this.props.employeeButtons.map((btn, key) => {
return btn(employee);
})}
</td>
</tr>
})}
</table>
)
}
}
解决方案
你不需要像那样传递按钮数组。
重构
//***************************************************/
class TableContainer extends React.Component {
viewEmployee(employee) {
console.log('Called view on:', employee.name)
}
deleteEmployee(employee) {
console.log('Called delete on:', employee.name)
}
render () {
return (
<EmployeeTable
viewEmployee={(employee) => this.viewEmployee(employee)}
deleteEmployee={(employee) => this.deleteEmployee(employee)}
/>
);
}
}
//***************************************************/
class EmployeeTable extends React.Component {
/** Fetches it's own employees in state **/
render () {
return (
<table>
{this.state.employees.map(employee => {
<tr>
<td>{employee.name}</td>
<td>
<button onClick={() => this.props.viewEmployee(employee)}>View</button>
<button onClick={() => this.props.deleteEmployee(employee)}>Delete</button>
</td>
</tr>
})}
</table>
)
}
}
//***************************************************/
推荐阅读
- google-cloud-platform - 如何使用部署管理器创建新的服务帐户和主题,并且只授予它对该主题的访问权限?
- python - 如何像python中的字符串一样索引C中的字符串?
- php - 将字符串转换为多维数组
- java - 如何将 Java 源代码转换为数据流图
- git - 52 次提交落后于 master
- javascript - 如何使用 nightwatch.js 检查整页是否有损坏的图像?
- python - Python 请求 POST - 408 超时
- java - 如何仅使用 Google Cloud Endpoints 配置 Model Mapper 一次?
- javascript - d8 shell 的 console.log 是否支持格式说明符?
- laravel - 尝试根据值设置不同的数组。错误:组件渲染函数中可能存在无限更新循环