【问题标题】:react context value undefined反应上下文值未定义
【发布时间】:2020-06-22 00:53:35
【问题描述】:

我正在学习一个教程,但我遇到了反应上下文问题

我的上下文组件看起来像这样

import React from 'react'

export const firebaseAuth = React.createContext()

const AuthProvider = props => {
  const { children } = props
  return (
    <firebaseAuth.Provider
      value={{
        test: 'context is working',
      }}
    >
      {children}
    </firebaseAuth.Provider>
  )
}

export default AuthProvider

我正在尝试在 Router 组件中测试我的上下文,不幸的是 test 未定义,我不确定如何调试它

import React, { useContext } from 'react'
import { BrowserRouter, Route, Switch } from 'react-router-dom'
import AuthProvider, { firebaseAuth } from './database/provider/AuthProvider'

const Router = () => {
  const test = useContext(firebaseAuth)
  console.log(test)
  return (
    <BrowserRouter>
      <AuthProvider>
        <Switch>
          <Route path="/login/" component={SignIn} />
   
          <Route component={NotFound} />
        </Switch>
      </AuthProvider>
    </BrowserRouter>
  )
}

export default Router

我知道这个问题已经在这里问了很多时间了,我已经查看了这些帖子,但仍然找不到解决方案。

有什么想法吗?

谢谢

【问题讨论】:

    标签: javascript reactjs ecmascript-6 react-context


    【解决方案1】:

    为了从上下文中获取值,需要在组件树的更高位置有一个提供者。所以任何&lt;AuthProvider&gt;后代都可以调用useContext(firebaseAuth) 并查看{test: 'context is working'}。但是Router&lt;AuthProvider&gt; 之外,所以它只会获得默认值,在你的情况下是未定义的。

    【讨论】:

    • 哦,好的,我现在明白了。所以我需要一个额外的Provider 环绕Router
    • 虽然在某些情况下多个提供者有意义,但您的身份验证提供者几乎肯定应该是单例的。因此,您需要将现有的提供程序移到组件树的更远位置,而不是添加提供程序。
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2023-03-11
    • 2021-01-10
    相关资源
    最近更新 更多