简体   繁体   English

React Ant 设计4 输入搜索显示表数据

[英]React Ant design 4 Input search display table data

I'm tried to create Ant design 4 input search to filter data, Name and age, when i search name or age wanna display table data but its not working anyone know how to do that correctly我试图创建 Ant 设计 4 输入搜索来过滤数据、姓名和年龄,当我搜索姓名或年龄时想要显示表数据但它不起作用任何人都知道如何正确地做到这一点

stazkblitz here 闪电战在这里

code here代码在这里

const columns = [
  {
    title: "Name",
    dataIndex: "name",
    key: "name",
    render: text => <a>{text}</a>
  },
  {
    title: "Age",
    dataIndex: "age",
    key: "age"
  }
];

const data = [
  {
    key: "1",
    name: "John Brown",
    age: 32
  },
  {
    key: "2",
    name: "Jim Green",
    age: 42
  },
  {
    key: "3",
    name: "Joe Black",
    age: 32
  }
];
const onSearch = value => console.log(value);
ReactDOM.render(
<div><Search
      placeholder="input search text"
      allowClear
      enterButton="Search"
      size="large"
      onSearch={onSearch}
    />
    <br/>
       <br/>   <br/>
    <Table columns={columns} dataSource={data} /></div>,
    document.getElementById('container')
 
);

Thanks谢谢

  • you need to extract your code to create a component;您需要提取代码来创建组件;
  • create a filterInput state with React.useState , that holds inputSearch value.使用React.useState filterInput它包含 inputSearch 值。 React.useState returns an array, where the first value is state, and second is a function to update that state value; React.useState返回一个数组,其中第一个值是 state,第二个是 function 以更新 state 值;
  • create a function filterData based on filterInput to filter your data table;根据filterInput filterData过滤你的数据表;

for filterData I return all data if it's empty.对于filterData ,如果它是空的,我会返回所有数据。 I check if is not a number to decide how to filter, by name or age.我检查是否不是一个数字来决定如何按姓名或年龄进行过滤。

function App() {
  const [filterInput, setFilterInput] = React.useState('')
  const filterData = () => {
    if(filterInput === '') return data

    if(isNaN(filterInput)) {
      return data.filter(({ name }) => name.includes(filterInput))
    }
    return data.filter(({ age }) => age === +filterInput)
  }

  return <div><Search
      placeholder="input search text"
      allowClear
      enterButton="Search"
      size="large"
      onSearch={setFilterInput}
    />
    <br/>
       <br/>   <br/>
    <Table columns={columns} dataSource={filterData()} /></div>
}

ReactDOM.render(
  <App />
,
    document.getElementById('container')
 
);

sample code示例代码

This will fix your problem这将解决您的问题

import React, { useState } from 'react';
import 'antd/dist/antd.css';
import { Table, Input } from 'antd';
import surveyList from './surveyList';

const columns = [
  {
    title: "Name",
    dataIndex: "name",
    key: "name",
    render: text => <a>{text}</a>
  },
  {
    title: "Age",
    dataIndex: "age",
    key: "age"
  }
];

const data = [
  {
    key: "1",
    name: "John Brown",
    age: 32
  },
  {
    key: "2",
    name: "Jim Green",
    age: 42
  },
  {
    key: "3",
    name: "Joe Black",
    age: 32
  }
]; 


function SearchTable() {
  const [filterTable, setFilterTable] = useState(null);

  const onSearch = (value) => {
    // const filterData = data.filter((item) => item.survey.includes(value));
    const filterData = data.filter((o) => Object.keys(o).some((k) => String(o[k])
      .toLowerCase()
      .includes(value.toLowerCase())));
    setFilterTable(filterData);
  };

  return (
    <div>
      <Input.Search
        style={{ border: '3px solid red', margin: '0 0 10px 0' }}
        placeholder="Search by..."
        enterButton
        onSearch={onSearch}
      />
      <Table
        columns={columns}
        dataSource={filterTable == null ? data : filterTable}
      />
    </div>
  );
}

export default SearchTable;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM