首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应中Immutable.js序列的错误循环计数

反应中Immutable.js序列的错误循环计数
EN

Stack Overflow用户
提问于 2018-02-13 17:26:12
回答 1查看 173关注 0票数 3

在我的React应用程序的一个组件中,我有以下代码:

代码语言:javascript
复制
render() {
  console.log("render");
  const x = Immutable.Map({a: 1, b: 2});

  return (
    <div>
      {x.entrySeq().map(() => {
        console.log("here");
        return (<div></div>)
      })}
    </div>
  )
}

奇怪的是,map函数中的循环执行了6次(我在控制台上得到了一个render,但是有6次here)。我本以为控制台中的here只有2倍之多。为什么叫了6次?也许Immutable.js中的序列的工作方式与我预期的不同。

更新:

我创建了一个非常简单的应用程序,使用create-react-app演示了被发现在吉萨布 (克隆-> npm run start ->浏览到本地主机:3000 ->监视控制台)的问题。奇怪的是,我不能在科普登上重现这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-14 17:36:17

我相信这是因为Seq很懒。这意味着,在迭代.map() Seq 之前,不会调用传递给的函数。

我认为会发生这样的事。当你打电话的时候

代码语言:javascript
复制
x.entrySeq.map(...)

这将创建一个新的Seq。然后,您的呈现函数返回这个Seq以作出反应。到目前为止,console.log("here")还没有被调用。

现在react正在将这个Seq存储在它的组件树中。每当function遍历树的这一部分(不仅在呈现时发生),它就会迭代您的Seq,从而调用传递给.map()的函数。

如果您希望避免每次响应决定遍历树的这一部分时进行这种恢复,则需要缓存Seq的输出。最简单的方法是在.toArray()之后使用.map(...)。在这种情况下,Seq将立即迭代一次,然后存储在一个数组中,然后给出一个数组以作出反应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48772389

复制
相关文章

相似问题

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