ReactJS 中的 Context API

reactjsweb developmentfront end technology更新于 2026/1/26 17:52:17

在本文中,我们将了解如何在基于类的组件中访问数据,而无需将其传递给每个父组件。

Context API 用于设置全局数据,现在可以在任何子组件中访问这些数据,而无需将其传递给每个父组件。

示例

假设有三个组件,分别是 A、B 和 C。A 是 B 的父组件,B 是 C 的父组件。因此,我们的组件结构如下 − A→B→C。

我们在 A 中定义了一些数据,并希望在组件 C 中处理这些数据。因此有两种方法可以解决这个问题 −

  • 要么将这些数据通过 B 传递给 C,但这并非最佳方法。

  • 另一种方法是使用 Context API,它用于集中处理数据,任何组件都可以访问这些数据,而无需将其传递给每个父组件。

在本例中,我们将构建一个身份验证 React 应用程序,该应用程序在子组件中登录或注销用户,并相应地更新状态。

我们将构建一个包含两个 LogIn 和 LogOut 组件的 App 组件,它们访问 Context 提供程序提供的状态并相应地更新状态。

AuthContext.js

import React from 'react';

const authContext = React.createContext({
   auth: null,
   login: () => {},
   logout: () => {},
});

export default authContext;

App.jsx

import React, { useState } from 'react';
import LogIn from './Login';
import LogOut from './Logout';
import AuthContext from './AuthContext';

const App = () => {

   const [auth, setAuth] = useState(false);
   const login = () => {
      setAuth(true);
   };
   const logout = () => {
      setAuth(false);
   };
   return (
      <React.Fragment>
      <AuthContext.Provider
      value={{ auth: auth, login: login, logout: logout }}
      <p>{auth ? 'Hi! You are Logged In' : 'Oope! Kindly Login'}
      <LogIn />
      <LogOut />
      </AuthContext.Provider>
      </React.Fragment>
   );
};
export default App;

Login.js

import React, { Component } from 'react';
import AuthContext from './AuthContext';

class Login extends Component {
   static contextType = AuthContext;
   render() {
      return (
      <div>
      <button onClick={this.context.login}>Login</button>
      </div>
      );
   }
}
export default Login;

Logout.js

import React, { Component } from 'react';
import AuthContext from './AuthContext';

class Logout extends Component {
   static contextType = AuthContext;
   render() {
      return (
      <div>
      <button onClick={this.context.logout}>Logout</button>
      </div>
      );
   }
}

export default Logout;

输出

这将产生以下结果。


相关文章