TGViewer
Заметки про React Заметки про React @ru_react_notes · 3.43K subscribers
Post #496 3.45K
useContextSelector – быстрый доступ к большому контексту

Если в вашем приложении используется большой контекст, то он может негативно влиять на производительность приложения. Каждое изменение контекста вызывает ре-рендер всех компонентов, которые зависят от контекста.

Чтобы уменьшить лишние ре-рендеры, можно мемоизировать компоненты:


import { memo } from 'react';

const Welcome = () => {
const { color } = useContext(ThemeContext);
return <WelcomeBody color={color} />
}

const WelcomeBody = memo(({ color }) => {
return <div style={{ color }}>Hello!</div>;
})


Еще один вариант оптимизации - разделить один большой контекст на несколько. У такого подхода есть минус: когда используется слишком много контекстов, с этим сложно работать.

Если вы не хотите использовать стейт-менеджеры, то при работе с контекстом можете использовать библиотеку use-context-selector. С ее помощью можно читать только часть объекта контекста и ре-рендерить, когда эта часть изменится.


import { createContext, useContextSelector } from 'use-context-selector';

const MyContext = createContext(null);

const Counter1 = () => {
const value = useContextSelector(MyContext, value => value.myValue);
…
}


https://marmelab.com/blog/2024/10/16/usecontextselector-a-faster-usecontext-for-react.html
Marmelab useContextSelector: Speeding Up React Apps With Large Context Tips and tricks to optimize the performance of your React app
  • 👍 10
  • 👎 9
  • ❤ 5
More from @ru_react_notes
  1. Jun 24, 2025Реактивность – это легко Стандартный useContext заставляет обновляться все компоненты-потр…
  2. Jun 17, 2025Остерегайтесь скрытых проблем при работе с search params Типо-безопасность — это только ве…
  3. Jun 4, 2025Почему Error Boundary, а не просто try/catch для компонентов В React нельзя использовать t…
  4. May 29, 2025Анонс TypeScript Native Вышла превью версия TypeScript написанная на Go. Ее можно установи…
  5. May 27, 2025Управление фокусом в React с помощью flushSync Установить фокус на инпуте сразу в React мо…
  6. May 15, 2025TanStack DB TanStack представила новую библиотеку – TanStack DB – реактивный клиентский ст…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →