I found useContext(ThemeContext)'s value is not update when use '{ Toolbar() }' in render.
What is the difference '' and '{ Toolbar() }' in react render or diff?
import React, { useContext, useState } from "react";
import "./styles.css";
const themes = {
light: {
name: "light",
foreground: "black",
background: "white"
},
dark: {
name: "dark",
foreground: "white",
background: "black"
}
};
const ThemeContext = React.createContext(null);
const Toolbar = props => {
const theme = useContext(ThemeContext) || {};
console.log(`Toolbar theme`, theme);
return (
<div
style={{
height: 60,
backgroundColor: theme.background,
color: theme.foreground
}}
>
<div>{theme.name}</div>
</div>
);
};
export default function App() {
const [currentTheme, setCurrentTheme] = useState(themes.light);
const toggleTheme = theme => {
setCurrentTheme(theme);
};
console.log(`currentTheme`, currentTheme);
return (
<div className="App">
<ThemeContext.Provider value={currentTheme}>
<div>
<button onClick={() => toggleTheme(themes.light)}>light</button>
<button onClick={() => toggleTheme(themes.dark)}>dark</button>
</div>
{/* Toolbar() */}
{/* {Toolbar()} */}
<Toolbar />
</ThemeContext.Provider>
</div>
);
}