<div class="container"></div>
const { createContext, useContext, useState, useMemo } = React;
type ValueType = { [key: string]: number | undefined };
const context = createContext<ValueType>(undefined as never);
const Component = ({ name }: { name: string }) => {
const value = useContext(context);
console.log(name);
return (
<div>
{name}:{value[name]}
</div>
);
};
const Component2 = ({ name }: { name: string }) => {
console.log(name);
return <div>{name}</div>;
};
const Page = ({children}) => {
const [value, setValue] = useState<ValueType>({});
console.log("Main");
return (
<>
<button onClick={() => setValue((v) => ({ ...v, A: (v["A"] || 0) + 1 }))}>
A
</button>
<button onClick={() => setValue((v) => ({ ...v, B: (v["B"] || 0) + 1 }))}>
B
</button>
<button onClick={() => setValue((v) => ({ ...v, C: (v["C"] || 0) + 1 }))}>
C
</button>
<context.Provider value={value}>{children}</context.Provider>
</>
);
};
ReactDOM.render(
<Page>
<Component name="A" />
<Component name="B" />
<Component name="C" />
<Component2 name="D" />
</Page>,
document.querySelector(".container")
);
View Compiled
This Pen doesn't use any external CSS resources.