2021-04-22 13:00:23
АнтипаттернИ вот тут есть проблема. В этом примере value контекста — это объект { signIn, signOut }.
Этот объект создаётся заново каждый раз, когда вызывается AuthWrapper. Из-за этого контекст каждый раз получает новое значение. А при изменении контекста React перерисовывает всё, что подключено к этому контексту.
В итоге каждый раз, когда мы перерисовываем AuthWrapper, React перерисовывает ещё и все зависимые от контекста компоненты. Если компонентов много, это особенно дорого.
shouldComponentUpdate/PureComponent/React.memo() не помогаютReact.memo(), PureComponent и shouldComponentUpdate предотвращают перерисовку компонента, если его пропсы и стейт не поменялись. Но они не работают с контекстом; поэтому тут они бессильны.
Как чинитьЧтобы починить, нужно сделать, чтобы объект не менялся каждый раз.
1) Самый простой способ — это вынести его из компонента:
1.5K views10:00