Вредит ли производительность ссылаться на все типы объектов в mapStateToProps? - PullRequest
0 голосов
/ 29 января 2019

Я создавал довольно обширное приложение с React, Redux и Normalizr, но боролся с чрезмерным количеством избыточных циклов рендеринга, и теперь думаю, что, возможно, неправильно понял, как объединить mapStateToProps и Normalizr.

В моем mapStateToProps я ссылаюсь на весь определенный тип сущности, который затем я могу использовать для получения сущности по ее идентификатору:

function mapStateToProps(state) {
    return {
        allMilestones: state.account.entities.milestones,
        allTasks: state.account.entities.tasks,
    }
}

Используя вышеприведенное mapStateToProps всякий раз, когда мне нужно получить сущность, я могу просто пойти (например) const taskObject = this.props.allTasks[taskId].Быстро и удобно, но я понимаю, что это означает, что вокруг пропадает много реквизитов - я думал, что передача ссылок не будет большой проблемой, но потом я заметил, что все перерисовывается просто, все время.

Будет ли это вероятным виновником неоправданного количества циклов рендеринга?

Если так, могу ли я ожидать, что реализация Reselect для всех этих случаев положительно повлияет на производительность?

1 Ответ

0 голосов
/ 29 января 2019

Возможно, но это предположение без эталонов (и вы должны попытаться уточнить это самостоятельно, прежде чем делать какие-либо оптимизации).React-Redux выполнит сравнение всех ключей объекта, возвращенного из mapStateToProps, и выполнит повторное рендеринг, если они различаются.

Если ссылка меняется каждый раз - потому что вы используете неизменяемую карту,например - тогда компонент будет перерисовываться каждый раз, когда вызывается mapStateToProps().

Вы должны попытаться сделать возвращаемое значение более стабильным, только возвращая то, что требуется подключенному компоненту.

https://react -redux.js.org / с использованием реагирующей-перевождь / подключения-mapstate # возвратного значение, определить, если ваш-компонент-до-ре-делает

...