微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React-实时搜索过滤器和搜索按钮

如何解决React-实时搜索过滤器和搜索按钮

我是React的新手,我试图创建一个实时搜索过滤器以及几个显示图像的按钮过滤器。现在,它获取类似JSON的虚拟数据。 我已经设法创建了实时搜索(如下代码中所示),但是我现在停留在其之上创建额外的过滤器。我想在实时搜索字段旁边有三个按钮,分别显示“全部”,“顶部”,“伟大”。 如何专门过滤以查找标签名称?在我的示例中,当我单击“顶部”或“出色”时,它应过滤原始列表并显示相关数据。 任何提示,不胜感激...谢谢!


import React,{ useState } from 'react';

function App() {
  const dataList = [
    {
      "id": 1,"tag": "Top","name": "bubb","image": "../img/bubb.jpg"
    },{
      "id": 2,"name": "lin bubb","tag": "Great","image": "../img/lin.jpg"
    },{
      "id": 3,"name": "smam","image": "../img/smam.jpg"
    },"name": "jumanji","image": ""
    },"name": "fruit spin","image": ""
    }
  ];

  const [searchText,setSearchText] = useState("");
  const [data,setData] = useState(dataList);


  // exclude column list from filter
  const excludeColumns = ["id","tag","image"];

  // handle change event of search input
  const handleChange = value => {
    setSearchText(value);
    filterData(value);
  };



    // filter records by search text
    const filterData2 = (value) => {
     //need to filter when tag selected
    }

    
  // filter records by search text
  const filterData = (value) => {
    const lowercasedValue = value.toLowerCase().trim();
    if (lowercasedValue === "") setData(dataList);
    else {
      const filteredData = dataList.filter(item => {
        return Object.keys(item).some(key =>
          excludeColumns.includes(key) ? false : item[key].toString().toLowerCase().includes(lowercasedValue)
        );
      });
      setData(filteredData);
    }
  }

  return (
    <div className="App">
      Search: <input
        style={{ marginLeft: 5 }}
        type="text"
        placeholder="Type to search..."
        value={searchText}
        onChange={e => handleChange(e.target.value)}
      />
      <span onClick={filterData2("all")}>All</span>
      <span onClick={filterData2("Top")}>Top</span>
      <span onClick={filterData2("Great")}>Great</span>
      
      <div className="Box-container">
        {data.map((data,i) => {
          return <div key={i} className="Box" style={{ backgroundColor: data.color }}>
            <img src={data.image}></img>
          </div>
        })}
        <div className="clearboth"></div>
        {data.length === 0 && <span>No records found to display!</span>}
      </div>
    </div>
  );
}

export default App;


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。