首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript ANTD表格渲染

问Typescript ANTD表格渲染
EN

Stack Overflow用户
提问于 2021-07-15 04:15:25
回答 1查看 655关注 0票数 0

我刚接触typescript和ant设计,我想使用ant设计创建一个表,并希望有一个" delete“列来手动删除表中的每一行。使用普通的React和JS,我可以在我的列对象中呈现删除链接,但是使用typescript,我不能。我必须在我的列类型中定义呈现函数吗?这是怎么回事?有人能帮上忙吗?示例代码如下:

代码语言:javascript
复制
type Column = {
   title: string;
   dataIndex: string;
   key: string;
};

const column: Column[] = [
   {
      title: 'Name',
      dataIndex: 'name',
      key: 'name'
   },
   {
      title: 'Action',
      dataIndex: '',
      key: 'x',
      render (() => <a>Delete<a>)
   }
]


return (
   <Table column={column} dataSource={data} />
)
EN

回答 1

Stack Overflow用户

发布于 2021-07-15 05:15:32

你可以查看官方Antd documentation获取示例。

为了回答你的问题,

更新delete按钮的onClick listener中的dataSource,并移除按下它的项。

此外,您可以调用API来处理删除行为并将更新的数据设置为dataSource属性。

提供了一个最低限度工作的代码示例。

​

代码语言:javascript
复制
const { useEffect, useState, useCallback, useMemo } = React
const { Table } = antd

const initialData = Array(15)
    .fill()
    .map((v, i) => `Item ${i}`)
    .map((name) => ({id: name, name}));

function App(props){
  const [data, setData] = useState([]);
  const resetData = useCallback(() => setData(initialData))
  const deleteHandler = useCallback((id) => {
    setData(prevState =>
      prevState.filter(row => row.id !== id))
  }, []);
  const column = useMemo(() => [
     {
        title: 'Name',
        dataIndex: 'name',
        key: 'name'
     },
     {
        title: 'Action',
        key: 'x',
        render: ((_, row) => <button onClick={() => deleteHandler(row.id)}>Delete</button>)
     }
  ], [])
  useEffect(() => {
    // fetch data from network.
    setData(initialData);
  }, [])
  return (
    <div>
     <button onClick={resetData}>Reset</button>
     <Table columns={column} dataSource={data} />
    </div>
   )
}

ReactDOM.render(<App />,
   document.querySelector('#root')
)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/antd/4.16.7/antd.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/antd/4.16.7/antd.compact.min.css"/>
<div id="root" />

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68384550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档