Web 공부/Apollo

Apollo

sumiin 2022. 3. 23. 12:11
반응형
SMALL

Apollo

  • query를 Axios의 fetch와 함께 POST request 로 보내야함

  • react Apollo가 뭔가를 얻으면 그걸 저장해둠(다시 request를 기다릴 필요가 없음) -cache

<Home.js>

import React from "react";
import {gql} from "apollo-boost";
import {useQuery} from "@apollo/react-hooks";
import styled from "styled-components";
import Movie from "../components/Movie";

const GET_MOVIES=gql` # localhost:4000에서 movies에 관한 query 가져옴 
{
    movies{
        id
        medium_cover_image
    }
}
`;

export default () => {
  const { loading, data } = useQuery(GET_MOVIES);//useQuery가 없을 때 error얻음 
  return (
    <Container>
      <Header>
        <Title>Apollo 2021</Title>
        <Subtitle>I love GraphQL</Subtitle>
      </Header>
      {loading && <Loading>Loading...</Loading>}
      {!loading &&
        data.movies &&
        data.movies.map(m => <Movie key={m.id} id={m.id} />)} 
    </Container>
  ); //loading false이면 Movie.js에 따라 id출력
};

<Detail.js>

import React from "react";
import {useParams} from "react-router-dom";
import {useQuery} from "@apollo/react-hooks";
import {gql} from "apollo-boost";
//해당 id클릭하면 detail 페이지로 넘어가는 코드 

const GET_MOVIE=gql` #query에 variable이 있다면 그것을 적어줘야 함
    query getMovie($id: Int!){# Apollo만을 위한 것 변수 type 검사
        movie(id:$id){ # 이 query는 server로 전달
        title
        medium_cover_image
        language
        rating
        description_intro
        }
    } 
`;

export default() => {
    let {id}=useParams();//parameter를 얻을 수 있음 
    const { loading, data } = useQuery(GET_MOVIE, {variables: { id:parseInt(id)}});

    if(loading){
        return "loading"
    }
    if(data&&data.movie){
        return data.movie.title;
    }

    return "Detail";
};

반응형
LIST