ApolloGraphQL読み込みクエリ

HeyImArt

Apollo GraphQLを使用して投稿をフェッチし、次のjsプロジェクトにデータを入力しています。

私が現在持っているコードは機能しますが、以下のコードではなく、useQueryのロード状態を実装したいと思います。

これはインデックスです(必要に応じて投稿ページ)

import Layout from "../components/Layout";
import Post from "../components/Post";
import client from "./../components/ApolloClient";
import gql from "graphql-tag";

const POSTS_QUERY = gql`
  query {
    posts {
      nodes {
        title
        slug
        postId
        featuredImage {
          sourceUrl
        }
      }
    }
  }
`;

const Index = props => {
  const { posts } = props;

  return (
    <Layout>
      <div className="container">
        <div className="grid">
          {posts.length
            ? posts.map(post => <Post key={post.postId} post={post} />)
            : ""}
        </div>
      </div>
    </Layout>
  );
};

Index.getInitialProps = async () => {
  const result = await client.query({ query: POSTS_QUERY });

  return {
    posts: result.data.posts.nodes
  };
};

export default Index;

次に、個々の投稿をフェッチします

    import Layout from "../components/Layout";
import { withRouter } from "next/router";
import client from "../components/ApolloClient";

import POST_BY_ID_QUERY from "../queries/post-by-id";

const Post = withRouter(props => {
  const { post } = props;

  return (
    <Layout>
      {post ? (
        <div className="container">
          <div className="post">
            <div className="media">
              <img src={post.featuredImage.sourceUrl} alt={post.title} />
            </div>
            <h2>{post.title}</h2>
          </div>
        </div>
      ) : (
        ""
      )}
    </Layout>
  );
});

Post.getInitialProps = async function(context) {
  let {
    query: { slug }
  } = context;
  const id = slug ? parseInt(slug.split("-").pop()) : context.query.id;
  const res = await client.query({
    query: POST_BY_ID_QUERY,
    variables: { id }
  });

  return {
    post: res.data.post
  };
};

export default Post;

'@ apollo / react-hooks'でuseQueryを使用しようとすると、常にdata.posts.mapが関数ではなくなります。

マイケル

あなたが使用している場合useQuery、あなたは次のようにデータをdestructureべきではないresult.data.posts.nodesデータフィールドがなるので、undefinedloading初めて通話についても同様です。そのため、エラーが発生しましたdata.posts.map is not a function次に、クエリがデータを正常にフェッチすると、loadingフィールドはfalseになります。
あなたはそれを試すことができます:

import Layout from "../components/Layout";
import Post from "../components/Post";
import client from "./../components/ApolloClient";
import { useQuery } from "@apollo/react-hooks"
import gql from "graphql-tag";

const POSTS_QUERY = gql`
  query {
    posts {
      nodes {
        title
        slug
        postId
        featuredImage {
          sourceUrl
        }
      }
    }
  }
`;

const Index = props => {
  const { posts } = props;
  const { loading, error, data } = useQuery(POSTS_QUERY);
  
  if (loading) return <div>Loading...</div>
  if (error) return <div>Error</div>
  
  return (
    <Layout>
      <div className="container">
        <div className="grid">
          {data.posts.nodes.length
            ? data.posts.nodes.map(post => <Post key={post.postId} post={post} />)
            : ""}
        </div>
      </div>
    </Layout>
  );
};

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クエリの読み込み中にリレーストアからデータを読み込みます

分類Dev

遅延読み込みまたは統合言語クエリ?

分類Dev

遅延読み込みまたは統合言語クエリ?

分類Dev

Laravelの積極的な読み込みクエリの問題

分類Dev

メディアクエリ、画像、読み込み時間

分類Dev

読み込みなしのFluent-NHibernateクエリ

分類Dev

SQLクエリ実行のjavafx読み込みの詳細

分類Dev

クエリの読み込み時間を改善

分類Dev

LaravelEagerの読み込み| 特定のユーザーのクエリ

分類Dev

ElasticsearchGroovyスクリプトの読み込みエラー

分類Dev

遅延読み込みなしのgridmvcクエリ

分類Dev

クエリで積極的な読み込みをエミュレートする

分類Dev

Meteorアプリ:初期読み込み> 1分、740万、800リクエスト

分類Dev

APIリクエストを順番に読み込む(JavaScript)

分類Dev

クエリが永久に読み込まれる

分類Dev

pyodbcクエリの結果を変数に読み込む

分類Dev

Httpリクエストの読み込みインジケーター

分類Dev

各httpリクエストの読み込みGIFを表示するAngular4

分類Dev

同期ajaxリクエストを回避し、読み込みを表示する

分類Dev

積極的な読み込みで重複クエリを排除する

分類Dev

Axios ajax、ajaxリクエストを行うときに読み込みを表示

分類Dev

「サブクエリ」ごとに個別の読み込みプロップ

分類Dev

SQLクエリの読み込みが言うよりも遅い

分類Dev

Google App EnginePythonで「読み込みリクエスト」を検出する

分類Dev

積極的な読み込みでクエリビルダーでORを使用する

分類Dev

メモリの読み取り/書き込みアクセスエラー例外

分類Dev

クエリの読み込みに時間がかかりすぎました

分類Dev

iframeサイズ固有のメディアクエリの読み込み

分類Dev

ionichttpリクエストの読み込みタイムアウト

Related 関連記事

  1. 1

    クエリの読み込み中にリレーストアからデータを読み込みます

  2. 2

    遅延読み込みまたは統合言語クエリ?

  3. 3

    遅延読み込みまたは統合言語クエリ?

  4. 4

    Laravelの積極的な読み込みクエリの問題

  5. 5

    メディアクエリ、画像、読み込み時間

  6. 6

    読み込みなしのFluent-NHibernateクエリ

  7. 7

    SQLクエリ実行のjavafx読み込みの詳細

  8. 8

    クエリの読み込み時間を改善

  9. 9

    LaravelEagerの読み込み| 特定のユーザーのクエリ

  10. 10

    ElasticsearchGroovyスクリプトの読み込みエラー

  11. 11

    遅延読み込みなしのgridmvcクエリ

  12. 12

    クエリで積極的な読み込みをエミュレートする

  13. 13

    Meteorアプリ:初期読み込み> 1分、740万、800リクエスト

  14. 14

    APIリクエストを順番に読み込む(JavaScript)

  15. 15

    クエリが永久に読み込まれる

  16. 16

    pyodbcクエリの結果を変数に読み込む

  17. 17

    Httpリクエストの読み込みインジケーター

  18. 18

    各httpリクエストの読み込みGIFを表示するAngular4

  19. 19

    同期ajaxリクエストを回避し、読み込みを表示する

  20. 20

    積極的な読み込みで重複クエリを排除する

  21. 21

    Axios ajax、ajaxリクエストを行うときに読み込みを表示

  22. 22

    「サブクエリ」ごとに個別の読み込みプロップ

  23. 23

    SQLクエリの読み込みが言うよりも遅い

  24. 24

    Google App EnginePythonで「読み込みリクエスト」を検出する

  25. 25

    積極的な読み込みでクエリビルダーでORを使用する

  26. 26

    メモリの読み取り/書き込みアクセスエラー例外

  27. 27

    クエリの読み込みに時間がかかりすぎました

  28. 28

    iframeサイズ固有のメディアクエリの読み込み

  29. 29

    ionichttpリクエストの読み込みタイムアウト

ホットタグ

アーカイブ