我有一个react组件,每秒从 redux 商店接收props。新状态的数组与上一个数组不同。具体来说,每秒都会有一个元素添加到数组中。例如:在一种状态下,数组是:
[1, 2, 3, 4, 5, 6]
下一个状态
[1, 2, 3, 4, 5, 6, 7]
我的减速机:
return {
...state,
myList: [ payload, ...state.myList.filter(item => payload.id !== item.id).slice(0, -1) ]
}
现在,在我的 react 组件中,我订阅了这种状态,并且对于每次更改,都会重新呈现列表。
import React, { Component } from 'react';
import MyRow from './MyRow';
class MyList extends Component {
render() {
return (
<div>
{this.props.myList.map((list, index) => (
<MyRow key={list.id} data={list}/>
))}
</div>
);
}
}
function select({ myList }) {
return { myList };
}
export default connect(select)(MyList);
在 MyRow.js 中
import { PureComponent } from 'react';
class MyRow extends PureComponent {
render() {
const data = this.props.data;
return (
<div>
{data.id} - {data.name}
</div>
);
}
}
export default MyRow;
现在,我的问题是:重新渲染已经渲染的每个元素对我来说成本很高。MyRow 大量使用样式组件和其他昂贵的操作。当状态更新时,这会导致 react 每秒重新渲染整个列表。如果更新时间少于 1 秒,这会变得更糟,比如每秒 4 次更新。在这种情况下,react 应用程序只会崩溃。
有没有办法只将新添加的项目添加到列表中而不重新渲染整个列表?
谢谢