質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GraphQL

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1400閲覧

@apollo/react-hooksのuseQueryで取得できるdata

katsun0921

総合スコア32

GraphQL

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/04/29 16:06

悩んでいる箇所

現在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: {…}}を取得できるようにしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

単純に{console.log}の場所が悪かったみたいでした。
loadingのあとにconsole.logに置いてみたら取得できました。

投稿2020/04/30 00:45

katsun0921

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問