【问题标题】:Implemeting search funcionality on iterated data from an API对来自 API 的迭代数据实现搜索功能
【发布时间】:2021-04-01 15:18:03
【问题描述】:

所以我创建了我正在处理的东西的沙箱https://codesandbox.io/s/charming-hellman-h9yqg 基本上我在这里从 API 获取数据,我已经迭代了 Book Component 中的数据,我还在组件/HoverBooks 中链接了这让我详情页/书。我已经迭代了搜索组件中的数据。我正在尝试实现 bookNames 的搜索功能,当他们按下它时,会将我推到 DetailsPage/Book。如果沙盒有问题,请发表评论。谢谢

【问题讨论】:

  • TypeError Cannot read property 'book' of undefined
  • 您能否将您的代码复制到可运行的 StackOverflow 代码格式中?
  • @ControlAltDel 大概有 8 个组件

标签: javascript arrays json reactjs


【解决方案1】:

我发现您为过滤功能准备数据的方式有些麻烦。关键代码是

function filterBooks(book) {
    console.log(book);
    if (!searchValue.length) return true;
    return book.bookName?.toLowerCase().includes(searchValue.toLowerCase());
  }
  return (
    <div>
      {Object.keys(data)
        .map((key) => data[key])
        .reduce((acc, curr) => acc.concat(curr), [])
        .filter(filterBooks)
        .map((book) => {
          return (
            <>
              <div
                onClick={() => {
                  history.push("/book/id", { book });
                }}
              >
                {" "}
                {book.bookName}{" "}
              </div>
            </>
          );
        })}

https://codesandbox.io/s/affectionate-pine-pbchq?file=/src/Book.js

已修复!

【讨论】:

  • 谢谢好心的先生,但我想知道如何才能做到,只有在我开始输入名称时才会显示书籍。现在它们都显示出来了
  • 哦,那你就得把filterBooks()第二行的return true改成return false
  • 如果要再次显示所有书籍,可以在 onClick 上添加 setSearchValue('')。
  • 我在您的过滤器函数中更改了一些拼写,但除了我们讨论过的return false 之外,它实际上是相同的
  • @diego92sigma6 谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 2015-03-31
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2019-11-04
相关资源
最近更新 更多