Skip to content

Instantly share code, notes, and snippets.

@ynwd
Created March 23, 2020 09:50
Show Gist options
  • Save ynwd/8541cb6113c3f3d2ea27a3b590752f00 to your computer and use it in GitHub Desktop.
Save ynwd/8541cb6113c3f3d2ea27a3b590752f00 to your computer and use it in GitHub Desktop.
React useState & createContext
import React, { useState } from 'react'
const languages = { en: 'en', fr: 'fr' }
const initialTheme = { colour: 'blue', lang: languages.en }
const { Provider, Consumer } = React.createContext(initialTheme)
const App = (): JSX.Element => {
const [theme, setTheme] = useState(initialTheme)
const setLanguage = (lang: string): void => {
setTheme({ ...theme, lang: lang })
}
return (
<Provider value={theme}>
<button onClick={(): void => setLanguage(languages.en)}>English</button>
<button onClick={(): void => setLanguage(languages.fr)}>French</button>
<Menu />
</Provider>
)
}
const Menu = (): JSX.Element => <MenuItem/>
const MenuItem = (): JSX.Element =>
<Consumer>
{ (value): JSX.Element =>
<p>Locale: {value.lang}</p>
}
</Consumer>
export default App
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment