Reactjs/Apollo: TypeError: Object(...)(...).data is undefined
Reactjs/Apollo: TypeError: Object(...)(...).data is undefined
我已经尝试解决此错误 3 天了,但我无法弄清楚。我不断收到
TypeError: Object(...)(...).data is undefined
whenever i try to go to a specific post using it's id. Importing it from db.
import React, { useContext } from "react";
import "./post.css";
import { AuthContext } from "../context/auth";
import DeleteButton from "../components/DeleteButton";
import { FETCH_POST_QUERY } from "../util/graphql";
import { useQuery } from "@apollo/client";
function SinglePost(props) {
const postId = props.match.params.postId;
const { user } = useContext(AuthContext);
console.log(postId);
const {
data: { getPost }
} = useQuery(FETCH_POST_QUERY, {
variables: {
postId
}
});
function deletePostCallback() {
props.history.push("/");
}
let postMarkup;
if (!getPost) {
postMarkup = <p>Loading post..</p>;
} else {
const {
id,
firstname,
lastname,
job,
phone,
address,
education,
workExperience,
} = getPost;
//const postKeys = Object.values(getPost.education);
postMarkup = (
<div class="wrapper clearfix">
<div class="left">
<div class="name-hero">
<div class="me-img"></div>
<div class="name-text">
<h1>
{firstname} <em>{lastname}</em>
</h1>
<p>{address}</p>
<p>Email soon</p>
<p>{phone}</p>
</div>
</div>
</div>
<div class="right" >
<div class="inner">
<section>
<h1>Employment</h1>
{workExperience.map((work) => (
<p key={work.id}>
{work.beginDate}--{work.endDate}
<em>{work.body}</em>
</p>
))}
</section>
<section>
<h1>Education</h1>
{education.map((edu) => (
<p key={edu.id}>
{edu.beginDate}--{edu.endDate}
<em>{edu.body}</em>
</p>
))}
</section>
<section>
<h1>Technical Skills</h1>
<ul class="skill-set">
<li>To be added</li>
</ul>
</section>
<section>
<h1>References</h1>
<p>To be Added</p>
</section>
<section>
<h1>Hobbies</h1>
<ul class="skill-set">
<li>Faith</li>
<li>Biblical Studies</li>
<li>Playing Guitar</li>
<li>Song Writing</li>
<li>Health & Nutrition</li>
<li>Reading</li>
</ul>
</section>
<section>
<div class="handmade">
<p>
handmade by <em> Anthony Adamski</em>
</p>
</div>
</section>
</div>
</div>
</div>
);
}
return postMarkup;
}
export default SinglePost;
我正在使用 apollo client/server 进行查询。
这是我用来从数据库中获取对象的查询
import gql from "graphql-tag";
export const FETCH_POST_QUERY = gql`
query ($postId: ID!) {
getPost(postId: $postId) {
id
useriD
firstname
lastname
job
phone
address
phone
education {
id
body
beginDate
endDate
}
workExperience {
id
body
beginDate
endDate
}
}
}
`;
这是我从我的应用程序中得到的结果
Error
当我在 graphQl 或 apollo studio 中尝试查询时,可以毫无问题地获取数据。但是当我在我的应用程序中尝试它时,我得到了那个错误。此外,每当我更改有关查询的内容时,都会获取数据,但是当我重新加载页面时,它不再工作并出现相同的错误。
抱歉,我知道这是一个重复的问题,但过去 2 天我一直在努力寻找解决方案。
第一次执行查询时,data
将是未定义的,因此当您尝试从未定义中提取 getPost
时,它会显示错误。
要解决此问题,请尝试使用 useQuery
中的 loading
状态并在执行查询后提取数据。
function SinglePost(props) {
const postId = props.match.params.postId;
const { user } = useContext(AuthContext);
console.log(postId);
const {
data, loading
} = useQuery(FETCH_POST_QUERY, {
variables: {
postId
}
});
function deletePostCallback() {
props.history.push("/");
}
let postMarkup;
if (loading) {
postMarkup = <p>Loading post..</p>;
} else {
const {
id,
firstname,
lastname,
job,
phone,
address,
education,
workExperience,
} = data.getPost;
//const postKeys = Object.values(getPost.education);
postMarkup = (
<div class="wrapper clearfix">
<div class="left">
<div class="name-hero">
<div class="me-img"></div>
<div class="name-text">
<h1>
{firstname} <em>{lastname}</em>
</h1>
<p>{address}</p>
<p>Email soon</p>
<p>{phone}</p>
</div>
</div>
</div>
<div class="right" >
<div class="inner">
<section>
<h1>Employment</h1>
{workExperience.map((work) => (
<p key={work.id}>
{work.beginDate}--{work.endDate}
<em>{work.body}</em>
</p>
))}
</section>
<section>
<h1>Education</h1>
{education.map((edu) => (
<p key={edu.id}>
{edu.beginDate}--{edu.endDate}
<em>{edu.body}</em>
</p>
))}
</section>
<section>
<h1>Technical Skills</h1>
<ul class="skill-set">
<li>To be added</li>
</ul>
</section>
<section>
<h1>References</h1>
<p>To be Added</p>
</section>
<section>
<h1>Hobbies</h1>
<ul class="skill-set">
<li>Faith</li>
<li>Biblical Studies</li>
<li>Playing Guitar</li>
<li>Song Writing</li>
<li>Health & Nutrition</li>
<li>Reading</li>
</ul>
</section>
<section>
<div class="handmade">
<p>
handmade by <em> Anthony Adamski</em>
</p>
</div>
</section>
</div>
</div>
</div>
);
}
return postMarkup;
}
export default SinglePost;
我已经尝试解决此错误 3 天了,但我无法弄清楚。我不断收到
TypeError: Object(...)(...).data is undefined whenever i try to go to a specific post using it's id. Importing it from db.
import React, { useContext } from "react";
import "./post.css";
import { AuthContext } from "../context/auth";
import DeleteButton from "../components/DeleteButton";
import { FETCH_POST_QUERY } from "../util/graphql";
import { useQuery } from "@apollo/client";
function SinglePost(props) {
const postId = props.match.params.postId;
const { user } = useContext(AuthContext);
console.log(postId);
const {
data: { getPost }
} = useQuery(FETCH_POST_QUERY, {
variables: {
postId
}
});
function deletePostCallback() {
props.history.push("/");
}
let postMarkup;
if (!getPost) {
postMarkup = <p>Loading post..</p>;
} else {
const {
id,
firstname,
lastname,
job,
phone,
address,
education,
workExperience,
} = getPost;
//const postKeys = Object.values(getPost.education);
postMarkup = (
<div class="wrapper clearfix">
<div class="left">
<div class="name-hero">
<div class="me-img"></div>
<div class="name-text">
<h1>
{firstname} <em>{lastname}</em>
</h1>
<p>{address}</p>
<p>Email soon</p>
<p>{phone}</p>
</div>
</div>
</div>
<div class="right" >
<div class="inner">
<section>
<h1>Employment</h1>
{workExperience.map((work) => (
<p key={work.id}>
{work.beginDate}--{work.endDate}
<em>{work.body}</em>
</p>
))}
</section>
<section>
<h1>Education</h1>
{education.map((edu) => (
<p key={edu.id}>
{edu.beginDate}--{edu.endDate}
<em>{edu.body}</em>
</p>
))}
</section>
<section>
<h1>Technical Skills</h1>
<ul class="skill-set">
<li>To be added</li>
</ul>
</section>
<section>
<h1>References</h1>
<p>To be Added</p>
</section>
<section>
<h1>Hobbies</h1>
<ul class="skill-set">
<li>Faith</li>
<li>Biblical Studies</li>
<li>Playing Guitar</li>
<li>Song Writing</li>
<li>Health & Nutrition</li>
<li>Reading</li>
</ul>
</section>
<section>
<div class="handmade">
<p>
handmade by <em> Anthony Adamski</em>
</p>
</div>
</section>
</div>
</div>
</div>
);
}
return postMarkup;
}
export default SinglePost;
我正在使用 apollo client/server 进行查询。 这是我用来从数据库中获取对象的查询
import gql from "graphql-tag";
export const FETCH_POST_QUERY = gql`
query ($postId: ID!) {
getPost(postId: $postId) {
id
useriD
firstname
lastname
job
phone
address
phone
education {
id
body
beginDate
endDate
}
workExperience {
id
body
beginDate
endDate
}
}
}
`;
这是我从我的应用程序中得到的结果
Error
当我在 graphQl 或 apollo studio 中尝试查询时,可以毫无问题地获取数据。但是当我在我的应用程序中尝试它时,我得到了那个错误。此外,每当我更改有关查询的内容时,都会获取数据,但是当我重新加载页面时,它不再工作并出现相同的错误。
抱歉,我知道这是一个重复的问题,但过去 2 天我一直在努力寻找解决方案。
第一次执行查询时,data
将是未定义的,因此当您尝试从未定义中提取 getPost
时,它会显示错误。
要解决此问题,请尝试使用 useQuery
中的 loading
状态并在执行查询后提取数据。
function SinglePost(props) {
const postId = props.match.params.postId;
const { user } = useContext(AuthContext);
console.log(postId);
const {
data, loading
} = useQuery(FETCH_POST_QUERY, {
variables: {
postId
}
});
function deletePostCallback() {
props.history.push("/");
}
let postMarkup;
if (loading) {
postMarkup = <p>Loading post..</p>;
} else {
const {
id,
firstname,
lastname,
job,
phone,
address,
education,
workExperience,
} = data.getPost;
//const postKeys = Object.values(getPost.education);
postMarkup = (
<div class="wrapper clearfix">
<div class="left">
<div class="name-hero">
<div class="me-img"></div>
<div class="name-text">
<h1>
{firstname} <em>{lastname}</em>
</h1>
<p>{address}</p>
<p>Email soon</p>
<p>{phone}</p>
</div>
</div>
</div>
<div class="right" >
<div class="inner">
<section>
<h1>Employment</h1>
{workExperience.map((work) => (
<p key={work.id}>
{work.beginDate}--{work.endDate}
<em>{work.body}</em>
</p>
))}
</section>
<section>
<h1>Education</h1>
{education.map((edu) => (
<p key={edu.id}>
{edu.beginDate}--{edu.endDate}
<em>{edu.body}</em>
</p>
))}
</section>
<section>
<h1>Technical Skills</h1>
<ul class="skill-set">
<li>To be added</li>
</ul>
</section>
<section>
<h1>References</h1>
<p>To be Added</p>
</section>
<section>
<h1>Hobbies</h1>
<ul class="skill-set">
<li>Faith</li>
<li>Biblical Studies</li>
<li>Playing Guitar</li>
<li>Song Writing</li>
<li>Health & Nutrition</li>
<li>Reading</li>
</ul>
</section>
<section>
<div class="handmade">
<p>
handmade by <em> Anthony Adamski</em>
</p>
</div>
</section>
</div>
</div>
</div>
);
}
return postMarkup;
}
export default SinglePost;