hooks使用之useContext
上下文: 因为后期像react-router redux 之类的这些库基本上用的全是上下文
那么你要去懂他们原理或者源码手写react-router
你就必须要有上下文的基础
定义: 允许组件之间通过除了props以外的情况去共享数据
一旦你的属性传递超过了4层 你就应该考虑一下是否使用上下文
上下文这个多数情况下是用来做全局数据管理的
创建上下文: createContext
// src/context/themeContext.js
import {createContext} from 'react'
// 一般大写开头
const ThemeContext = createContext('light')
export default ThemeContext注册上下文: ThemeContext.Provider
import ThemeContext from './context/themeContext'
const [theme, setTheme] = useState()
function App() {
return (
<div>
<ThemeContext.Provider value={theme}>
<其他组件 />
// ....
</ThemeContext.Provider>
<button onClick={() => {
setTheme(theme === 'dark' ? 'light' : 'dark')
}}>Toggle</button>
</div>
)
}接入useContext
import {useContext} from 'react'
import ThemeContext from './context/themeContext'
export default function Demo() {
const contextValue = useContext(ThemeContext)
return (
<div style={background-color: contextValue === 'light' ? 'xxxx' : 'YYY'}></div>
)
}