// 一个包含主题和用户信息的全局 Context
const GlobalContext = React.createContext(null);
const [theme, setTheme] = useState('light');
const [user, setUser] = useState(null);
// 每次 theme 或 user 变化,都会创建一个全新的 value 对象
const value = { theme, user, setTheme, setUser };
<GlobalContext.Provider value={value}>
</GlobalContext.Provider>
// 主题切换按钮,它只关心 theme 和 setTheme
function ThemeToggleButton() {
const { theme, setTheme } = useContext(GlobalContext);
console.log('ThemeToggleButton re-rendered'); // 问题所在
function UserProfile() {
const { user } = useContext(GlobalContext);
console.log('UserProfile re-rendered');