如果你有一天,突然发现自己的 React 项目里「子组件需要跟父组件传货数据」,但是一层传一层,一层传一层,你会怀疑:——
我是不是又连环带引爆了?
别怕!这时候,React 给了你一把神器:Context!
这篇文,我会用最可爱最诡质的语法,带你一起掌握 Context 。
—— 目标:看完直接开始自己写 Provider,第一次让全局通信如水一样顺畅!
把 Context 理解成:
来!发入我们的第一段 Context 体验。
import { createContext } from 'react';
const ThemeContext = createContext(); // 简单更精美
import React, { useState } from 'react';
export const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState('light');
const toggleTheme = () => {
setTheme(prev => (prev === 'light' ? 'dark' : 'light'));
};
return (
{children}
);
};
import { useContext } from 'react';
export const useTheme = () => {
const context = useContext(ThemeContext);
if (!context) throw new Error('useTheme 必须在 ThemeProvider 里使用');
return context;
};
下面,一个子组件,直接使用 Context:
const ThemeSwitcher = () => {
const { theme, toggleTheme } = useTheme();
return (
当前为:{theme}模式
);
};
如果你想在全局的 App 里封装:
const App = () => (
);
此时,ThemeSwitcher 不用经过一大堆 props,一點即到,直接用 Context 全局通信!
Context 一下子:
你得到的:——
Context 是基础,Provider 是组织,Hook 是使用!
如果说有啥是 React 里的 “高性价比技能”,Context 算一个!
没有什么能比:
“我不用 props 一层一层传,子组件自由吸吸广播”
更爽的了!
「你没有理解 Context,你只看到传统成功,你理解了 Context,你自己就是传统」!
(哈,还是不错的!)
如果你想看一个更大的实战案例,推荐自己写一个 “AuthContext” 或 “LanguageContext” ,自己体会一下,一定超级有成就感!