useContext 的使用方法
trycoding.fun

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 逐层传递