main
js 25 lines 745 Bytes
Raw
1 import React, {createContext, useContext, useState} from 'react';
2
3 const Theme = createContext('light');
4
5 export default Theme;
6
7 export function ThemeToggleButton({onChange}) {
8 let theme = useContext(Theme);
9 let [targetTheme, setTargetTheme] = useState(theme);
10 function toggleTheme() {
11 let newTheme = theme === 'light' ? 'dark' : 'light';
12 // High pri, responsive update.
13 setTargetTheme(newTheme);
14 // Perform the actual theme change in a separate update.
15 setTimeout(() => onChange(newTheme), 0);
16 }
17 if (targetTheme !== theme) {
18 return 'Switching to ' + targetTheme + '...';
19 }
20 return (
21 <a className="link" onClick={toggleTheme}>
22 Switch to {theme === 'light' ? 'Dark' : 'Light'} theme
23 </a>
24 );
25 }