useContext 的使用方法
理解 React useContext 的作用和使用场景
问题
如何使用 useContext 在组件间共享数据?
解答
什么是 Context
Context 可以看作扩大版的 props,它能将数据通过 Provider 传递给被包裹的所有子组件,避免逐层传递 props。
Context 是局部的全局变量,只有被 Provider 包裹的组件才能访问这些数据。
使用步骤
1. 创建 Context
import { createContext } from 'react';
const MyContext = createContext();
2. 使用 Provider 传递数据
import React, { createContext, useContext, useState } from 'react';
const initialState = { m: 100, n: 50 };
const X = createContext();
export default function App() {
const [state, setState] = useState(initialState);
return (
<X.Provider value={{ state, setState }}>
<Child />
</X.Provider>
);
}
3. 子组件获取数据
function Child() {
const { state, setState } = useContext(X);
const handleClick = () => {
setState({ m: state.m + 1, n: state.n + 1 });
};
return (
<div>
<p>m: {state.m}, n: {state.n}</p>
<button onClick={handleClick}>修改数据</button>
</div>
);
}
注意事项
当 Context 的值发生变化时,所有使用该 Context 的组件都会重新渲染。这是 React 的更新机制,而不是响应式数据绑定。
关键点
- 使用
createContext()创建上下文对象 - 通过
Provider组件的value属性传递数据 - 子组件使用
useContext(Context)获取数据 - Context 值变化会触发所有消费组件重新渲染
- 适合跨层级传递数据,避免 props 逐层传递
目录