当前位置: 首页 > 面试题库 >

过滤器与地图reactjs和jsx

曹景铄
2023-03-14
问题内容

我正在研究一个React项目,以学习React。

在组件的render方法中,当我用于.map遍历值并返回组件数组时,一切都会按预期进行。

<ol className="books-grid">
        {              
          books && books.map((book, index) => {
            if (book.shelf === shelf) {
              return (
                <Book key={book && book.id ? book.id : index} changeShelf={this.props.changeShelf} book={book} />
              );
            }
          })}
      </ol>

但是当我使用时filter

<ol className="books-grid">
            {              
              books && books.filter((book, index) => {
                if (book.shelf === shelf) {
                  return (
                    <Book key={book && book.id ? book.id : index} changeShelf={this.props.changeShelf} book={book} />
                  );
                }
              })}
          </ol>

我得到了错误(我已经研究过)

Uncaught (in promise) Error: Objects are not valid as a React child

我不明白为什么filter会抛出此错误vs map?有什么独特的反应可以.map吗?两者都返回一个数组。


问题答案:

Array.filter不允许您将数据转换为组件。那是工作Array.map

您应该先过滤,然后再链接地图调用:

{              
  books && books
    .filter(book => book.shelf === shelf)
    .map((book, index) => {
      return (
        <Book
           key={book && book.id ? book.id : index}
           changeShelf={this.props.changeShelf}
           book={book} />
      );
    })
}

如果您希望避免在的列表上进行第二次传递books,那么您也可以返回null,尽管这样做“不太好”,因为您强迫React
null在根本不需要做任何工作的情况下进行渲染:

{              
  books && books
    .map((book, index) => {
      if (book.shelf !== shelf) {
        return null;
      }
      return (
        <Book
           key={book && book.id ? book.id : index}
           changeShelf={this.props.changeShelf}
           book={book} />
      );
    })
}


 类似资料:
  • 我从事elasticsearch,我尝试混合两个工作查询。第一个是“and filter”,第二个是“bool filter”,但我失败了。 我的查询是从用户交互界面动态生成的。 “和过滤器”: 我需要“和过滤器”来查询数据,例如,字段必须等于“非洲”或“亚洲”或为空。这是一个工作查询的示例: 此查询工作正常,结果如下: 现在我需要用字段“D\u TYPESTATUS”来限制结果数据,该字段必须与

  • 我所拥有的 预期产出 实际产量 这只是一个例子。在我的真实代码中,我正在对我的全局状态(useContext, useReduer)执行删除操作。 是一个ID数组。

  • 我有下面的地图地图,并想过滤它的基础上的一个值。结果应分配回同一地图。请告诉我什么是最好的方法。 我尝试了如下操作,但无法访问employee对象

  • 我刚开始使用RxJava/RxAndroid,在理解如何正确处理背压方面有一些问题。 我有一个文件扫描器,可以扫描目录并发出文件。应尽快处理这些文件,并且不跳过任何文件。 所以管道看起来像这样:<代码>可观察 不幸的是,我收到了rx。例外情况。缺少背压异常错误。所以我读了关于背压的书,如果我理解正确的话,无损耗选项只是缓冲区和窗口。 我试过了BackPressureBuffer()、buffer(

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 我正试图在我的RecyclerView中实现搜索过滤器,就像在这篇文章中一样 我已经对它进行了调试,它确实按照预期过滤了项目,但列表在应用程序中似乎没有改变。一、 E:我过滤一个名字,有7个结果,在屏幕上是原始列表。 我的 onCreateMenu活动选项是: 我的适配器如下所示: 我忘了什么? 提前致谢!