Я пытаюсь прослушать изменения одного свойства значения контекста. Если я использую контекст React, который имеет значение объекта с дюжиной или около того свойств:
{
prop1: "value1",
prop2: "value2",
prop3: "value3",
...
prop12: "value12"
}
, то каждый компонент, имеющий useContext(MyContext)
, будет перерисован.
function MyComponent() {
const c = useContext(MyContext); // The full object
const {prop1} = c; // This component only cares about prop1
return <div>{prop1}</div>;
}
Поскольку этот компонент заботится только об одном свойстве в контексте, я не хочу, чтобы он повторно отображался, если prop1
остался прежним. Я пытаюсь создать хук, который будет перерисовываться на основе селектора, например:
useContextProp(MyContext, c => c.prop1); // only re-renders when prop1 changes
, но я не могу найти способ подписаться на изменения. Кто-нибудь знает хитрость?
Обновление:
Мое текущее решение - useMemo
в компоненте, чтобы избежать повторного рендеринга сложных макетов:
function MyComponent() {
const {prop1} = useContext(MyContext);
// ... other possibly complex calculations
return useMemo(() => <div>{prop1}</div>, [prop1]); // Assume complex layout
}
Но это не помогает мне с другими частями компонента, где могут быть сложные вычисления, сборка данных и т. Д. c. Подробности не важны, но было бы здорово, если бы был хук, который прослушивал одно значение, чтобы мне не приходилось писать useMemo
везде.