在click reacts上添加和删除数组中的项目

时间:2018-05-23 07:37:59

标签: javascript reactjs antd

我正在使用reactjs和ant设计处理一个简单的表。

我的计划是在按钮点击时添加和删除列表中的新项目。

我的问题是我不知道该怎么做。

我试图遵循这个thread,但没有运气。

希望你理解我。

感谢。

sample code

function remove() {
  console.log("remove");
}
function add() {
  console.log("add");
}

const columns = [
  {
    title: "Num",
    dataIndex: "num"
  },
  {
    title: "Name",
    dataIndex: "name"
  },
  {
    title: "Age",
    dataIndex: "age"
  },
  {
    title: "Address",
    dataIndex: "address"
  }
];
const data = [
  {
    key: "1",
    num: 1,
    name: "John Brown",
    age: 32,
    address: "New York No. 1 Lake Park"
  },
  {
    key: "2",
    num: 2,
    name: "Jim Green",
    age: 42,
    address: "London No. 1 Lake Park"
  },
  {
    key: "3",
    num: 3,
    name: "Joe Black",
    age: 32,
    address: "Sidney No. 1 Lake Park"
  }
];

<Table pagination={false} columns={columns} dataSource={data} />
    <Button type="primary" onClick={add}>
      add
    </Button>
    <Button type="danger" onClick={remove}>
      remove
    </Button>

1 个答案:

答案 0 :(得分:2)

您需要使用react state。当您想要addremove时,State保存数据,更新此状态并对重新呈现表做出反应。

我已更新您的代码。点击add后会添加一个新的随机行。点击删除最后一行即被删除。

CodeSandbox

import React from "react";
import ReactDOM from "react-dom";
import "antd/dist/antd.css";
import "./index.css";
import { Table, Button } from "antd";

function remove() {
  console.log("remove");
}
const columns = [
  {
    title: "Num",
    dataIndex: "num"
  },
  {
    title: "Name",
    dataIndex: "name"
  },
  {
    title: "Age",
    dataIndex: "age"
  },
  {
    title: "Address",
    dataIndex: "address"
  }
];
let data = [
  {
    key: "1",
    num: 1,
    name: "John Brown",
    age: 32,
    address: "New York No. 1 Lake Park"
  },
  {
    key: "2",
    num: 2,
    name: "Jim Green",
    age: 42,
    address: "London No. 1 Lake Park"
  },
  {
    key: "3",
    num: 3,
    name: "Joe Black",
    age: 32,
    address: "Sidney No. 1 Lake Park"
  }
];

export default class MyTable extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      data: data
    };
  }
  add = () => {
    var row = {
      key: "99",
      num: 99,
      name: "I am New",
      age: 32,
      address: "New Address"
    };
    var newStateArray = [...this.state.data];
    newStateArray.push(row);
    this.setState(() => {
      return {
        data: newStateArray
      };
    });
  }

remove = () => {
  var newStateArray = [...this.state.data];
  if(newStateArray.length > 1) {
    newStateArray.pop();
  }
  this.setState(() => {
    return {
      data: newStateArray
    };
  });
}
  render() {
    return (
      <div>
        <Table
          pagination={false}
          columns={columns}
          dataSource={this.state.data}
        />
        <Button type="primary" onClick={this.add}>
          add
        </Button>
        <Button type="danger" onClick={this.remove}>
          remove
        </Button>
      </div>
    );
  }
}
ReactDOM.render(<MyTable />, document.getElementById("container"));