使用 TypeScript 和 Next.JS 的 Context API

2025-06-07

使用 TypeScript 和 Next.JS 的 Context API

如何使用 TypeScript 和 next.JS 编写上下文 API

照片由 [Pakata Goh](https://unsplash.com/@pakata?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) 于 [Unsplash](https://unsplash.com/s/photos/developer?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) 拍摄

为什么我们需要背景?

在典型的 React 应用中,数据通过 props 自上而下(从父组件到子组件)传递,但对于应用中许多组件都需要的某些类型的 props(例如语言环境偏好、UI 主题),这种用法可能会很繁琐。Context 提供了一种在组件之间共享此类值的方法,而无需在组件树的每一层都显式传递 props。阅读更多

什么是 contextAPI?

Context 提供了一种通过组件树传递数据的方法,而无需在每个级别手动传递 props。

所以,现在我们知道了为什么需要上下文以及什么是上下文,让我们深入研究编码部分。

开始之前,使用 TypeScript 设置 NextJS 应用的基本版本



npx create-next-app context-api
npm install --save-dev typescript @types/react


Enter fullscreen mode Exit fullscreen mode

创建一个名为context的文件夹,用于存储所有不同的上下文。现在,创建一个AuthContext.tsx文件。

步骤 1:创建上下文类型

在 AuthContext.tsx 中。
由于我们使用 TypeScript,因此必须为上下文创建类型



type authContextType = {
    user: boolean;
    login: () => void;
    logout: () => void;
};


Enter fullscreen mode Exit fullscreen mode

步骤 2:创建上下文默认值



const authContextDefaultValues: authContextType = {
    user: null,
    login: () => {},
    logout: () => {},
};


Enter fullscreen mode Exit fullscreen mode

步骤 3:- createContext 和 useContext



const AuthContext = createContext<authContextType>(authContextDefaultValues);

export function useAuth() {
    return useContext(AuthContext);
}


Enter fullscreen mode Exit fullscreen mode

步骤 4:创建提供程序函数



type Props = {
    children: ReactNode;
};

export function AuthProvider({ children }: Props) {
    const value = {

    }
    return (
        <>
            <AuthContext.Provider value={value}>
                {children}
            </AuthContext.Provider>
        </>
    );
}


Enter fullscreen mode Exit fullscreen mode

我们将包装这个AuthProvider函数,在其中使用我们的上下文,并且 value 属性将包含 authContextType 的值。我们将在下一步中填充这些值。

步骤 4:填写值



export function AuthProvider({ children }: Props) {
    const [user, setUser] = useState<boolean>(null);

    const login = () => {
        setUser(true);
    };

    const logout = () => {
        setUser(false);
    };

    const value = {
        user,
        login,
        logout,
    };

    return (
    ...


Enter fullscreen mode Exit fullscreen mode

现在我们的上下文已可以使用了。

步骤 5:启用 AuthProvider

首先,我们必须启用AuthProvider,为此,请像这样编辑默认的 _app.js 文件



import { AuthProvider } from "../context/AuthContext";
import "../styles/globals.css";

function MyApp({ Component, pageProps }) {
    return (
        <>
            <AuthProvider>
                <Component {...pageProps} />
            </AuthProvider>
        </>
    );
}

export default MyApp;


Enter fullscreen mode Exit fullscreen mode

步骤 6:使用上下文

现在删除所有模板 nextJS 生成并简单地导入上下文



import Head from "next/head";
import styles from "../styles/Home.module.css";
import { useAuth } from "../context/AuthContext";

export default function Home() {
    const { user, login, logout } = useAuth();

    return (
        <div className={styles.container}>
            <Head>
                <title>Context-api with TypeScript and nextJS</title>
                <link rel="icon" href="/favicon.ico" />
            </Head>
            <main className={styles.main}>
                <div>
                    <h1>Hello Context</h1>
                    <h2>User: {user ? "login" : "logout"}</h2>
                    <div>
                        <button onClick={login}>Login</button>
                        <button onClick={logout}>Logout</button>
                    </div>
                </div>
            </main>
        </div>
    );
}



Enter fullscreen mode Exit fullscreen mode

好的,这里发生了很多事情,让我来分解一下,首先我们导入上下文钩子“useAuth”,然后在我们的 Home() 中解构“useAuth”中的所有值,然后根据我们的要求使用它。

查看现场演示
Github repo

我的投资组合
Linkedin
twitter

文章来源:https://dev.to/shareef/context-api-with-typescript-and-next-js-2m25
PREV
二进制文件 “二进制”文件和“文本”文件之间的区别
NEXT
如何使用 HTML、CSS 和 JavaScript 构建待办事项列表应用程序