悩んでいる箇所
現在apolloを使用してwordpressからgraphqlでデータの取得を試みています。
その際にuseQuery()のdataの値が、一度undefinedになった後、データを取得してしまっています。
コード
jsx
1import React from 'react' 2import ApolloClient, {gql, InMemoryCache} from "apollo-boost"; 3import { ApolloProvider, useQuery } from "@apollo/react-hooks" 4 5import PostLayout from '../components/PostLayout' 6 7 8const client = new ApolloClient({ 9 uri: "https://localhost.info/graphql", 10 cache 11}); 12 13export const POSTS_QUERY = gql` 14 { 15 posts { 16 nodes { 17 id 18 title 19 content 20 uri 21 date 22 } 23 } 24 } 25` 26 27const Posts = () => { 28 const { loading, error, data } = useQuery(POSTS_QUERY); 29 console.log(data) 30 if (loading) return <p>Loading Posts...</p> 31 if (error) return <p> {data}Something wrong happened!</p> 32 if (data === undefined) return <p>ERROR</p> 33 return ( 34 <pre>{data}test</pre> 35 ); 36}; 37 38const BlogList = () => { 39 const blogClassName = 'p-blog' 40 return ( 41 <PostLayout> 42 <ApolloProvider client={client}> 43 <h1>My First Apollo Theme!</h1> 44 <Posts /> 45 </ApolloProvider> 46 </PostLayout> 47 ) 48} 49 50export default BlogList 51
jsx
1import React from 'react' 2 3import Layout from 'components/Layout' 4import SEO from 'components/SEO' 5import 'scss/layout/index.scss' 6import 'scss/object/project/_top.scss' 7import Content from '../components/Content' 8import BlogList from '../templates/BlogList' 9 10class IndexPage extends React.Component<IndexProps, showState> { 11 constructor(props: showState) { 12 const post: boolean = props.pageContext.post 13 super(props) 14 this.state = { 15 showContent: post ? post : false, 16 tabType: post ? props.pageContext.node.categories[0].name : '', 17 props: this.props, 18 post: post ? post : false, 19 } 20 this.clickShowContent = this.clickShowContent.bind(this) 21 this.clickShowPost = this.clickShowPost.bind(this) 22 } 23 clickShowContent(type: string) { 24 this.setState({ 25 showContent: !this.state.showContent, 26 tabType: type, 27 }) 28 } 29 clickShowPost() { 30 this.setState({ 31 post: true ? false : true, 32 }) 33 } 34 35 render() { 36 const topClassName = 'p-top' 37 const menuClassName = 'l-menu' 38 return ( 39 <Layout> 40 <SEO /> 41 <nav className={`${menuClassName}__blocks`} id="js-topMenu"> 42 <button 43 onClick={() => this.clickShowContent(TAB_TYPES.BLOG)} 44 className={`js-btnBlog js-topBtn ${topClassName}__blogBlock ${menuClassName}__block`} 45 > 46 <div className={`${topClassName}__blogContainer`}> 47 <div 48 className={`${menuClassName}Blog ${menuClassName}__subHeading ${menuClassName}--blog`} 49 > 50 Blog 51 </div> 52 </div> 53 </button> 54 </nav> 55 </div> 56 {this.state.showContent ? ( 57 <PostContext.Provider value={this.state}> 58 <BlogList /> 59 </PostContext.Provider> 60 ) : null} 61 </Layout> 62 ) 63 } 64} 65 66export default IndexPage 67
結果
bash
1undefined 2{posts: {…}}
実現したいこと
dataの取得がundefinedではなく、{posts: {…}}を取得できるようにしたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。