React:更新数组元素而不重新渲染其他数组元素

IT技术 arrays reactjs performance immutability
2021-05-17 12:18:44

是否可以重新渲染数组的元素防止其他元素重新渲染

示例:有一个包含 500 个<Card>组件的数组并编辑<Card>编号为 27(更新myArrayprops),我只想重新渲染 <Card>编号为 27。

render = () => {
    this.props.myArray.map(card => {
        return <Cards key={card.id} ...card />
    })
}

就我而言,<Card>组件有点重,如果它们没有单独更改,我希望避免重新渲染它们,但是一旦myArrayprop 更改并触发render()方法,每个组件都会<Card>被重新渲染,从而导致每次<Card>更改时出现一些性能问题

3个回答

最后,我按照 Gabriele 的建议通过shouldComponentUpdate()Card组件中使用方法解决了这个问题,即使Card组件是更新数组的一部分,如果shouldComponentUpdate()返回,它也会保持先前呈现的状态false

詹姆斯的回答对我很有用。如果您使用 React Hook,请使用React.memoprevPropswithnextProps来实现shouldComponentUpdate().

(仅供参考:https ://reactjs.org/docs/hooks-faq.html#how-do-i-implement-shouldcomponentupdate

在你的组件中使用记忆化。如果它没有改变,相应的组件不会被重新渲染。谷歌搜索“react memoize”会给你带来很多不错的资源。我还会改进您的 Card 组件以接收 Card 对象而不是每个卡片属性。解构卡片对象会让你更难编写代码来记住它。

render = () => {
    this.props.myArray.map(card => {
        return <Cards key={card.id} card={card} />
    })
}