reactjs - 无法从提供者获取数据以在反应上下文中使用
问题描述
我试图将一些值从反应上下文提供者传递给消费者,但我无法这样做。
这是我的 app.js 文件
import React, { useState,useCallback } from "react";
import { Container, Nav } from "./styled-components";
import Detail from "./Detail";
import Home from "./Home";
import { NavLink,Route,BrowserRouter as Router,HashRouter,Redirect,Switch } from 'react-router-dom';
import Auth from '../user/pages/Auth';
import Header from "./Header";
import { AuthContext } from '../shared/context/auth-context';
import { useAuth } from '../shared/hooks/auth-hook';
const App = () => {
const { token, login, logout, userId } = useAuth();
console.log(userId);
let routes;
if (token) {
routes=(
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/detail/:metricType" component={Detail} />
<Redirect to="/" />
</Switch>
)
}
else{
routes=(
<Switch>
<Route path="/auth"><Auth /></Route>
<Redirect to="/auth" />
</Switch>
)
}
return (
<AuthContext.Provider
value={{
isLoggedIn: !!token,
token: token,
userId: userId,
login: login,
logout: logout
}}
>
<Router>
<Header/>
<main>{routes}</main>
</Router>
</AuthContext.Provider>
)
}
export default App;
现在这是我的上下文 auth-context.js
import { createContext } from 'react';
export const AuthContext = createContext({
isLoggedIn: false,
userId: null,
token: null,
login: () => {},
logout: () => {}
});
最后这是我在 header.js 中的消费者
import React, { useContext } from 'react';
import { Link, NavLink } from 'react-router-dom';
import { Container, Nav } from "./styled-components";
import { AuthContext } from '../context/auth-context';
export default Header => {
const auth = useContext(AuthContext);
console.log(auth);
return (
<Nav className="navbar navbar-expand-lg fixed-top is-white is-dark-text">
<Container className="navbar-brand h1 mb-0 text-large font-medium">
<a href="/"> DevOps Dashboard</a>
</Container>
<ul className="nav-links">
{!auth.isLoggedIn && (
<li>
<NavLink to="/auth">Login</NavLink>
</li>
)}
{auth.isLoggedIn && (
<li>
<button onClick={auth.logout}>LOGOUT</button>
</li>
)}
</ul>
</Nav>
)
}
我只得到 {isLoggedIn: false, userId: null, token: null, login: ƒ, logout: ƒ}
上面的console.log。我在传递时拥有 app.js 中的所有值,但在使用标头时,看起来我总是从上下文文件中获取默认值。
解决方案
推荐阅读
- c - STM32 CAN环回模式
- javascript - 使用 WebAssembly 在 Canvas 上绘制系列图像是否更快?
- reactjs - 当变量未定义时,是否可以使用 React 组件的条件渲染?
- version-control - Tortoise Mercurial - 合并 2 个提交
- reactjs - 每次单击按钮时将状态数据推送到数组
- javascript - IE 的“SCRIPT1010:预期标识符”错误的原因是什么?
- scala - (String, Int, Boolean) 类型的覆盖方法 => Double 具有不兼容的类型
- c++ - 提升进程间向量崩溃
- mysql - 如何在批量 INSERT 中使用 Node.js 中的 mysql / sqlstring 正确转义?
- keras - 我的模型 LSTM 损失中的问题:我的验证数据为 81.84%