@ jpdelatorre відповідь чудово підкреслює загальні причини, через які компонент React може повторно відображатись.
Я просто хотів зануритися трохи глибше в один екземпляр: коли змінюється реквізит . Виправлення неполадок того, що викликає повторне відображення компонента React, є моїм досвідом, і багато разів, відстежуючи цю проблему, передбачає визначення реквізиту, який змінюється .
Реагуючі компоненти повторно відображаються щоразу, коли отримують нові реквізити. Вони можуть отримувати нові реквізити:
<MyComponent prop1={currentPosition} prop2={myVariable} />
або якщо MyComponent
він підключений до магазину редукцій:
function mapStateToProps (state) {
return {
prop3: state.data.get('savedName'),
prop4: state.data.get('userCount')
}
}
У будь-який час значення prop1
, prop2
, prop3
, або prop4
зміни MyComponent
будуть повторної візуалізації. За допомогою 4 реквізитів не надто складно відстежити, який реквізит змінюється, поставивши console.log(this.props)
на цьому початку render
блоку. Однак із складнішими компонентами та дедалі більшою кількістю реквізитів цей метод неможливий.
Ось корисний підхід (використовуючи lodash для зручності), щоб визначити, які зміни опори викликають повторне відображення компонента:
componentWillReceiveProps (nextProps) {
const changedProps = _.reduce(this.props, function (result, value, key) {
return _.isEqual(value, nextProps[key])
? result
: result.concat(key)
}, [])
console.log('changedProps: ', changedProps)
}
Додавання цього фрагмента до вашого компонента може допомогти виявити винуватця, що викликає сумнівні повторні рендери, і багато разів це допомагає пролити світло на непотрібні дані, що перетворюються на компоненти.
shouldComponentUpdate
для відключення автоматичного оновлення компонентів, а потім почати свій шлях звідти. Більше інформації можна знайти тут: facebook.github.io/react/docs/optimizing-performance.html