【问题标题】:the render order of an array of React components is wrongReact 组件数组的渲染顺序错误
【发布时间】:2020-11-30 21:47:33
【问题描述】:

我有一组反应组件,我试图以特定顺序呈现。像这样的:

render: function() {
  var items = stock.map(function(item) {
    return <NewLI data={item} key={item.id}/>
  }
  return <ul>{items}</ul>
}

我的问题是 React 没有按照原始数组的顺序返回 li(实际组件比单个 li 更复杂,但它被正确地包装在 div 中)。

所以如果打印项目的id 键,我会得到这个:

items.forEach(function(a) { console.log(a.id) })

返回

> 1
> 2
> 3
> 4

但我的 React 渲染看起来像这样:

<ul>
  <li...>2</li>
  <li...>3</li>
  <li...>4</li>
  <li...>1</li>
</ul>

这是预期的行为吗?有没有办法保证订单?

【问题讨论】:

  • stock 数组是什么样的?另外,如果您能提供minimal reproducible example,那就太好了。
  • stock 数组中有一些奇怪的东西...id 不能像您期望的那样与 li 的内容相对应。我们可以看看那个数组吗

标签: reactjs


【解决方案1】:

您可以在映射和渲染之前定义一个排序数组。

render: function() {
  stock.sort(comparefunction)
  var items = stock.map(function(item) {
    return <NewLI data={item} key={item.id}/>
  }
  return <ul>{items}</ul>
}

comparefunction = (s1,s2) => {
   if(s1.propToSortBy > s2.propToSortBy)   //assuming each element is an object
       return 1;
   if(s1.propToSortBy > s2.propToSortBy) 
       return -1;
   
    return 0;
}

请详细说明stock 数组的外观,以便我们更好地理解。

【讨论】:

  • 但是根据问题中的第二个代码示例,items 数组已经正确排序了。
猜你喜欢
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 2018-06-16
相关资源
最近更新 更多