Как стать автором
Обновить

Комментарии 10

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

MobX в помощь

MobX, без сомнения, крут, но далеко не панацея, у всего есть свои минусы

А какие? И насколько эти минусы ощущаются в реальности?

Очень сильно ощущаются. Слишком много свободы. Нет каких-либо устоявшихся паттернов. Из-за этого видел на многих проектах просто свалку из сторов или слишком большие сторы. Также мутировать поля напрямую запретить тебе может только твой коллега под угрозой бытия.

Это проблемы кривого проектирования, никакого отношения к мобх не имеющие. Налапшекодить можно с любым стейт-манагером.

Слишком много свободы
Нет каких-либо устоявшихся паттернов

Типичная "проблема" человека с острым недостатком опыта. Нужно чтобы кто-то стоял над душой с кнутом и говорил куда смотреть, куда складывать дрова и т.п. Ибо свое мнение ещё не сформировалось. Так что нельзя отнести это к минусом, а наоборот этот пункт жирный плюс.

Из-за этого видел на многих проектах просто свалку из сторов или слишком большие сторы.

Ни то, ни другое минусом не является, т.к. тут все зависит от конкретных задач и условий.

Также мутировать поля напрямую запретить тебе может только твой коллега под угрозой бытия.

Это тоже не является проблемой, т.к. отследить с помощью IDE в каких местах читается и в каких местах мутируется поле делается за 2 щелчка мышкой.

Спасибо! Для начала самое то

Немного спорная классификация причин ререндеринга. "Изменение хука" можно выкинуть, там по факту всё свелось к изменениям стейта или контекста. За перерендером родителя тоже скрыта более корневая причина - создание нового элемента (той хрени, которая в треугольных скобках) в момент родительского рендера. Если компонент не memo, то он при этом ререндерится всегда, если memo, то только при изменении пропсов. В примере, где внутри useMemo создается < SlowComponent / >, это хорошо видно - SlowComponent не обновляется при ререндере своего родителя, потому как элемент один и тот же.

Если бы ререндеры были проблемой производительности, то реакт компоненты бы под капотом использовали хок мемо. Не туда воюите

Зарегистрируйтесь на Хабре , чтобы оставить комментарий