JS: React
Теория: Композиция компонентов
Обычно к memo прибегают в крайних случаях. Если в приложении есть проблемы с производительностью, то чаще всего это связано с неправильной компоновкой и неудачной работой с состоянием.
В этом уроке мы разберем несколько приемов построения компонентов, которые помогут избежать проблем с оптимизацией не прибегая к memo.
Пример ниже состоит из двух компонентов, в котором при изменении состояния в одном компоненте отрисовывается дочерний:
Чтобы избежать лишнего рендера Greeting, достаточно убрать из App состояние. Этого можно добиться выделением дополнительного компонента:
Может показаться, что это усложнило приложение из-за добавления еще одного компонента. Но на самом деле такой код лучше описывает архитектуру. Состояние теперь выделено там, где используется, нет компонентов, которые бы перерисовывались без необходимости при изменении состояния.
Такой подход не всегда может работать, разберем это на другом примере:
Здесь мы не можем выделить состояние так же, как в предыдущем случае, потому что родительский элемент тоже использует состояние. Так не получится сделать:
Однако выход есть, и он достаточно простой:
Как и прежде, мы добавили еще один компонент Form, внутри которого используется состояние и находятся компоненты, зависящие от этого состояния. Компоненты, которым это состояние не нужно, остались в корневом компоненте App и попадают в Form через children.
Такой простой способ позволяет изолировать состояние от компонентов, которые не зависят от него. Прежде чем использовать memo, лучше рассмотреть этот подход. Он более выгоден, так как позволяет выстроить правильную композицию приложения.




