reactjs - 如果 ME_ 查询返回数据,我需要显示用户名和注销按钮,否则我想显示“未登录”。我怎样才能实现它?
问题描述
我正在使用来自 apollo/react-hooks 的 useQuery。单击注销按钮时,我正在执行 client.resetStore()。但是正文或用户和注销按钮没有被删除。我不得不对 client.resetStore() 使用 try-catch,因为没有它我会收到 GraphQL 错误。
如果 ME_ 查询返回数据,我想显示用户名和注销按钮,否则我想在单击注销按钮时显示“未登录”。我怎样才能实现它?
下面是我的组件代码:-
import React from "react";
import { Link } from "react-router-dom";
import { useQuery, useMutation } from "@apollo/react-hooks";
import { setAccessToken } from "./accessToken";
import { ME_ } from "./Queries";
import { LOGOUT_ } from "./Queries";
const Header = () => {
const { client, loading, error, data } = useQuery(ME_, {
fetchPolicy: "network-only",
});
const [logout] = useMutation(LOGOUT_);
if (error) {
console.log("me error", error);
}
console.log("me data", data);
let body = null;
if (loading) {
body = <div>loading...</div>;
} else if (data && data.me) {
body = <div>you are logged in as: {data.me.email}</div>;
} else {
body = <div>not logged in</div>;
}
return (
<nav className="navbar navbar-expand-lg navbar-light bg-light">
<div className="container-fluid">
<span className="navbar-brand">Navbar</span>
<button
className="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span className="navbar-toggler-icon"></span>
</button>
<div className="collapse navbar-collapse" id="navbarNav">
<ul className="navbar-nav">
<li className="nav-item">
<Link to="/">Home</Link>
</li>
<li className="nav-item">
<Link to="/register">Register</Link>
</li>
<li className="nav-item">
<Link to="/login">Login</Link>
</li>
<li className="nav-item">
<Link to="/protect">Protected</Link>
</li>
</ul>
</div>
{body}
{!loading && data && data.me ? (
<button
onClick={async () => {
try {
await logout();
setAccessToken("");
await client.resetStore();
body = "ssssssssssssssss";
} catch (e) {
console.log("logout err");
body = "ssssssssssssssss";
}
}}
>
logout
</button>
) : null}
</div>
</nav>
);
};
export default Header;
解决方案
推荐阅读
- java - Clojure 中的快速随机字符串生成器
- c# - 如何使用 Visual Studio Code 对 Unity 代码进行单元测试?
- powerbi - 检查值是否在范围内并在其他表中返回相应值的 DAX 函数
- sas - 总结具有相同 ID 的行并忽略较小的类别
- java - 为什么我的端口源会随着我发送的每条 UDP 消息而改变?
- java - 三元运算符中的“+=”运算符是什么意思?
- palantir-foundry - 在 Foundry Slate 中,如何使用把手动态索引到数组或对象?
- shiny - DT 表功能
- angular - Angular 路由 Home 组件仅在我单击时才有效
- c++11 - 是否可以在 C++ 中定义具有静态成员的类的友元函数?