You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在纯TypeScript类组件(.ts)中使用useContext?

TypeScript类组件中使用React Context的方法

纯TypeScript组件(包括类组件)完全支持使用React Context,下面是具体的实现步骤和代码示例:

1. 确保Context有正确的TypeScript类型定义

首先要给Context定义明确的类型,避免后续使用时出现类型错误:

import React from 'react';

// 定义Context的结构类型
interface AppContextType {
  user: { name: string; id: number } | null;
  setUser: (user: AppContextType['user']) => void;
}

// 创建Context并指定类型,同时提供符合类型的默认值
export const AppContext = React.createContext<AppContextType>({
  user: null,
  setUser: () => {},
});

2. 在类组件中使用Context的两种方式

方式一:使用static contextType(推荐类组件使用)

通过声明static contextType将组件与Context关联,之后可以直接通过this.context访问上下文值:

import React from 'react';
import { AppContext } from './AppContext';

class Profile extends React.Component {
  // 关联目标Context
  static contextType = AppContext;
  // 给context添加类型注解,确保TS能正确推断类型
  context: React.ContextType<typeof AppContext>;

  render() {
    const { user, setUser } = this.context;

    return (
      <div>
        {user ? (
          <p>Welcome, {user.name}!</p>
        ) : (
          <button onClick={() => setUser({ name: 'John Doe', id: 1 })}>
            登录
          </button>
        )}
      </div>
    );
  }
}

方式二:使用Context.Consumer

如果需要在组件的某个局部访问Context,或者需要同时访问多个Context,可以使用Consumer组件:

import React from 'react';
import { AppContext } from './AppContext';

class Profile extends React.Component {
  render() {
    return (
      <AppContext.Consumer>
        {(context) => {
          const { user, setUser } = context;
          return (
            <div>
              {user ? (
                <p>Welcome, {user.name}!</p>
              ) : (
                <button onClick={() => setUser({ name: 'John Doe', id: 1 })}>
                  登录
                </button>
              )}
            </div>
          );
        }}
      </AppContext.Consumer>
    );
  }
}

3. 确保组件被Context Provider包裹

无论哪种使用方式,类组件都必须被对应的Context.Provider包裹,才能获取到正确的上下文值:

import React from 'react';
import { AppContext } from './AppContext';
import Profile from './Profile';

class App extends React.Component {
  state = {
    user: null,
  };

  setUser = (user: AppContextType['user']) => {
    this.setState({ user });
  };

  render() {
    return (
      <AppContext.Provider value={{ user: this.state.user, setUser: this.setUser }}>
        <Profile />
      </AppContext.Provider>
    );
  }
}

export default App;

内容的提问来源于stack exchange,提问作者Dinesh V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:10:48