React:给定一个数组,有效地以相反的顺序渲染元素

IT技术 javascript reactjs
2021-04-23 05:03:23

我目前以典型的 React 风格呈现一个列表。该列表作为数组props传递,我像这样映射它:

{this.props.myList.map(createListItem, this)}

因此,当添加一个新元素时,它看起来就像最新的项目被添加到列表的末尾。

我希望它使最新的项目出现在顶部。即一切都以逆时间顺序出现。

到目前为止,我提出的两个选项是:1)反转列表,每次添加内容时创建一个新数组,并将这个反转列表作为props传递。2)使用移位。

但由于性能,它们都没有吸引力。

我不知道 Javascript 支持倒序映射。我一直在尝试 for 循环,但我一直无法让它工作。

在 React 中以相反顺序呈现数组的惯用方法是什么?

6个回答

如果您选择使用reverse(),shift()反转列表splice()则应先制作数组的浅表副本,然后在副本上使用该函数。React 中的 props 不应该被改变。

例如:

[...this.props.myList].reverse().map(createListItem, this)

或者

this.props.myList.slice(0).map(createListItem, this)

(这真的应该是一个评论,但我还没有这样做的要点:))

此方法也适用于 stateReact.useState((current)=>[...current].reverse())如果您不使用扩展运算符,则它不起作用。(用一组对象“测试”)
2021-05-29 05:03:23
是的,非常感谢!我的一系列图片出现闪烁问题,您保存了我的设计!
2021-05-30 05:03:23
在 4 秒内工作。我需要更多时间来写这篇评论!谢谢!
2021-06-05 05:03:23
你帮我处理了这段代码。谢谢你。this.state.ALLProducts.reverse().map((ALLProducts) =>
2021-06-09 05:03:23

如果您需要以相反的顺序在 UI 中显示列表,您也可以使用

flex-direction: row-reverse;

或者

flex-direction: column-reverse;
没想到这个,而不是 reverse() , flex-direction 效果很好。感谢您提供这个独特的解决方案。
2021-06-15 05:03:23
非常感谢这种方法,无需额外使用 CPU 来反转记录
2021-06-22 05:03:23

正如其他人所指出的,不起眼的反向方法在大多数情况下都可以完成这项工作。我目前遇到了同样的问题,我必须说至少在 Chrome 中使用 array.reverse(),性能影响没有被视为这样。在我看来,它比使用循环以相反的顺序对列表进行排序要好。

 array.reverse()

array.reverse()每当状态发生变化时,使用顺序就会发生一些变化。我用flexDirection:'column-reverse'它工作得很好,你也不需要弄乱数组数据。

反向修改数组,你可以做 array.slice().reverse() 来反转数组的副本
2021-05-27 05:03:23

在数组的开头添加新元素:

array.splice(0,0,'value to add at beginning');

或者for使用立即调用的函数调用循环:

{(() => {
     for(...) {
         return (<i>{whatever}</i>)
     }
})()}
我更喜欢 array.unshift(val)
2021-05-31 05:03:23
是的,我不知道我为什么跳到splice:)
2021-06-01 05:03:23