Если я изменю свойство верхнего уровня этого AppState, вызвав setState, тогда все приложение будет перерисовано (поскольку все зависит от AppState).
Если вы измените и использовать чистые компоненты, тогда ничего не будет отображаться, вы изменяете состояние, создавая новый объект состояния.
Однако если я изменю вложенное дочернее свойство этого AppState, то ничего не произойдет, потому что React не обратите внимание на изменение свойства.
Это верно только в том случае, если вы мутировали, а компоненты чистые.
Какова производительность рендеринга этого грубого подхода по сравнению с Redux?
При сверлении с опорой будет отрисовываться все дерево, но ветви, которые используют состояние, которое не изменилось, не будут отрисовываться, если они чистые. Бурение с опорой плохо для обслуживания, потому что если вам нужно реорганизовать логарифм великого дочернего состояния c, вам может потребоваться рефакторинг всего дерева или ветви. Но с точки зрения производительности это не будет иметь большого успеха, если вы будете использовать чистые компоненты и будете осторожны при передаче обратных вызовов, а не при их повторном создании при каждом рендеринге (см. useCallback ).
Как именно Redux обрабатывает «частичные визуализации», так что только некоторые из компонентов повторно визуализируют после изменения состояния?
React-redux useSelector или connect mapStateToProps всегда вызывается каждый раз, когда диспетчер изменяет состояние и перед рендерингом.
Если результат отличается от последнего результата, реакция-избыточность вызовет рендеринг компонента. Если компонент получает реквизиты, то рендеринг также может быть запущен, потому что реквизиты меняются и выполняется maptate / selector.
Подключенный компонент будет наблюдать состояние и визуализировать, когда результат mapState или селектора изменился. Пример приложения с журналами, показывающими, что будет работать response-redux, можно найти здесь