首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React设计4输入搜索显示表数据

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

Stack Overflow用户
提问于 2021-01-22 18:18:52
回答 2查看 3.2K关注 0票数 1

我尝试创建Ant design 4输入搜索来过滤数据、名称和年龄,当我搜索姓名或年龄想要显示表数据时,没有人知道如何正确地这样做。

https://stackblitz.com/edit/react-ghvwxl?file=index.js

代码在这里

代码语言:javascript
复制
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')
 
);

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-23 04:52:43

  • 您需要提取代码来创建组件;
  • 使用filterInput创建一个包含inputSearch值的inputSearch状态。React.useState返回一个数组,其中第一个值是状态,第二个是更新该状态值的函数;
  • 创建一个基于filterData的函数filterInput来过滤数据表;

对于filterData,如果数据为空,则返回所有数据。我检查是否是一个数字来决定如何过滤,按姓名或年龄。

代码语言:javascript
复制
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')
 
);

样本代码

票数 1
EN

Stack Overflow用户

发布于 2022-01-28 18:48:07

这会解决你的问题

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65850635

复制
相关文章

相似问题

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