问题描述
我有一个react-table,它是一个简单的CRUD应用程序。每行都有一个删除按钮以删除该记录。
在我的实现中,当我尝试使用delete button
时,效果很好。
但是当我通过调用API进行操作时,const AdminAPInfo = [];
this.state = {
apiInfo: AdminAPInfo.map((prop,uuid) => {
return {
id: uuid,name: prop[0],actions: (
<div className="actions-right">
<Button
fill="true"
onClick={() => {
var data = this.state.data;
data.find((o,i) => {
if (o.id === uuid) {
data.splice(i,1);
console.log(data);
console.log(i);
return true;
}
return false;
});
this.setState({
data: data,});
}}
color="danger"
size="sm"
className="btn-icon btn-link remove"
id="tooltip974171201"
>
<i className="fa fa-times" />
</Button>
</div>
),};
}),};
}
不会呈现。
问题是,以下实现适用于静态数据,但不适用于动态数据(来自api的数据)
Link to the static data example
<ReactTable
data={apiInfo}
columns={[
{
Header: "API Name",accessor: "name",},{
Header: "Actions",accessor: "actions",sortable: false,ilterable: false,]}
和此反应表组件
typescript
Link to my code in codeSandbox
解决方法
您需要每次在渲染时调用此convert方法。
选中此代码和框
https://codesandbox.io/s/gracious-cloud-9xwx8
您正在做的是在componentDidMount
处设置渲染数据,但随后您使用的是从API调用返回的json。
因此,您每次都需要调用此convert函数。