为什么我加了context之后页面一片空白,还没有报错?

来源:5-5 用useContext存储全局用户信息

全网最帅

2021-05-18

页面图片描述
src/index.tsx 图片描述

context的index 图片描述

auth-provider.ts

import React, { ReactNode, useState } from "react"
import { User } from "screens/project-list/search-panel"
import * as auth from '../auth-provider'

interface AuthForm {
    username: string,
    password: string,
}

const AuthContext = React.createContext<{
    user: User | null,
    register: (form: AuthForm) => Promise<void>,
    login: (form: AuthForm) => Promise<void>,
    logout: () => Promise<void>,
} | undefined>(undefined)
AuthContext.displayName = "AuthContext"

export const AuthProvider = ({children}: {children: ReactNode}) => {
    const [user, setUser] = useState<User | null>(null)
    const login = (form: AuthForm) => {
        return auth.login(form).then(user => setUser(user))
    }
    const register = (form: AuthForm) => {
        return auth.register(form).then(user => setUser(user))
    }
    const logout = () => {
        return auth.logout().then(() => setUser(null))
    }

    return <AuthContext.Provider value={{ user, login, register, logout }} />
}

export const useAuth = () => {
    const context = React.useContext(AuthContext)
    if (!context) {
        throw new Error('useAuth必须在authprovider中使用')
    }
    return context
}

调试显示问题出在auth-context->AuthProvider函数的return那边就追不下去了(下图打断点的那一行)
图片描述

写回答

1回答

Nolan

2021-05-19

仔细对比源代码,<AuthContext.Provider 没加 children属性

3
1
全网最帅
非常感谢!是我粗心了
2021-05-19
共1条回复

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程