You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1018 B
48 lines
1018 B
// Theme context, default to light theme
|
|
const ThemeContext = React.createContext('light');
|
|
|
|
// Signed-in user context
|
|
const UserContext = React.createContext({
|
|
name: 'Guest',
|
|
});
|
|
|
|
class App extends React.Component {
|
|
render() {
|
|
const {signedInUser, theme} = this.props;
|
|
|
|
// App component that provides initial context values
|
|
// highlight-range{2-3,5-6}
|
|
return (
|
|
<ThemeContext.Provider value={theme}>
|
|
<UserContext.Provider value={signedInUser}>
|
|
<Layout />
|
|
</UserContext.Provider>
|
|
</ThemeContext.Provider>
|
|
);
|
|
}
|
|
}
|
|
|
|
function Layout() {
|
|
return (
|
|
<div>
|
|
<Sidebar />
|
|
<Content />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
// A component may consume multiple contexts
|
|
function Content() {
|
|
// highlight-range{2-10}
|
|
return (
|
|
<ThemeContext.Consumer>
|
|
{theme => (
|
|
<UserContext.Consumer>
|
|
{user => (
|
|
<ProfilePage user={user} theme={theme} />
|
|
)}
|
|
</UserContext.Consumer>
|
|
)}
|
|
</ThemeContext.Consumer>
|
|
);
|
|
}
|
|
|