useContext
可多个组件共享某些状态
使用
useContext,就不需用在使用props一层一层传递。
用法:
使用 createContext.Provider 来包裹需要共享数据的组件,并通过 value 属性传递数据
import React, { useContext, useState } from 'react';
// 创建上下文
const ThemeContext = React.createContext<ThemeContextType>({} as ThemeContextType);
// 定义上下文类型
interface ThemeContextType {
theme: string;
setTheme: (theme: string) => void;
}
const Child = () => {
// 获取上下文
const themeContext = useContext(ThemeContext);
const styles = {
backgroundColor: themeContext.theme === 'light' ? 'white' : 'black',
border: '1px solid red',
width: 100 + 'px',
height: 100 + 'px',
color: themeContext.theme === 'light' ? 'black' : 'white'
}
return <div>
<div style={styles}>
child
</div>
</div>
}
const Parent = () => {
// 获取上下文
const themeContext = useContext(ThemeContext);
const styles = {
backgroundColor: themeContext.theme === 'light' ? 'white' : 'black',
border: '1px solid red',
width: 100 + 'px',
height: 100 + 'px',
color: themeContext.theme === 'light' ? 'black' : 'white'
}
return <div>
<div style={styles}>
Parent
</div>
<Child />
</div>
}
function App() {
const [theme, setTheme] = useState('light');
return (
<div>
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>切换主题</button>
<ThemeContext.Provider value={{ theme, setTheme }}>
<Parent />
</ThemeContext.Provider>
</div >
);
}
export default App;