首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ant Design表搜索定制

Ant Design表搜索定制
EN

Stack Overflow用户
提问于 2019-08-13 14:08:25
回答 2查看 13.3K关注 0票数 1

我使用ant设计表,并使用getColumnSearchProps进行column-driven搜索。我希望将search input放在列的标题中。但是我不知道如何处理对此列和输入的搜索?

数据:

代码语言:javascript
复制
const data = [
  {
    key: '1',
    name: 'John Brown',
    age: 32,
    address: 'New York No. 1 Lake Park',
  },
  {
    key: '2',
    name: 'Joe Black',
    age: 42,
    address: 'London No. 1 Lake Park',
  }]

以下是我的专栏:

代码语言:javascript
复制
const columns = [
    {
        title: (
            <>
                <Search
                    placeholder="search"
                    prefix={<CPIcon type="search" />}
                    onChange={??????????????}
                />
                name
            </>
        ),
        dataIndex: 'name',
        key: '1',
        align: 'right',
        render: text => (<h1>{text}</h1>)
    },

    other columns ...
]

在render中:

代码语言:javascript
复制
<Table columns={columns} dataSource={data} />
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-13 16:17:21

String.includes()中使用Array.filter()

另外,请注意,Input.Search只添加了两个属性:onSearchenterButton,因此不使用任何额外的道具来呈现它是没有意义的。

代码语言:javascript
复制
export default function App() {
  const [dataSource, setDataSource] = useState(data);
  const [value, setValue] = useState('');

  const FilterByNameInput = (
    <Input
      placeholder="Search Name"
      value={value}
      onChange={e => {
        const currValue = e.target.value;
        setValue(currValue);
        const filteredData = data.filter(entry =>
          entry.name.includes(currValue)
        );
        setDataSource(filteredData);
      }}
    />
  );

  const columns = [
    {
      title: FilterByNameInput,
      dataIndex: 'name',
      key: '1'
    }
  ];

  return (
    <FlexBox>
      <Table columns={columns} dataSource={dataSource} />
    </FlexBox>
  );
}

票数 9
EN

Stack Overflow用户

发布于 2020-08-11 10:30:35

另一个答案真的有效吗?我实际上使用了一个额外的useCallback函数:

代码语言:javascript
复制
export default () => {
  const [data, setData] = useState(null)
  const [val, setVal] = useState('')

  const filterVals = useCallback((e) => {
    const currValue = e.target.value
    setVal(currValue)
    const filteredVals = data.filter(entry =>
      entry.val.includes(currValue)
    )
    setData(filteredVals)
  }, [loading])

  const columns = [
    {
      title:
        <Input
          placeholder="lalaland"
          value={val}
          onChange={filterVals}
        />,
      dataIndex: 'val',
    },
  ]

  return (
    <Table
      bordered
      dataSource={data}
      columns={columns}
    />
  )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57471984

复制
相关文章

相似问题

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