자습서: Apollo 클라이언트 및 React 및 TypeScript
20074 단어 typescriptgraphqljavascriptreact
React 및 TypeScript를 사용하여 Apollo 클라이언트 설치
우리의 생활을 더욱 간단하게 하기 위해서 우리는 create-react-app
부터 시작할 것이다. 특히 typescript 템플릿은 다음과 같다.
yarn create react-app apollo-client-react-typescript --template typescript
그런 다음 GraphQL 옆에 Apollo 클라이언트를 설치합니다.
yarn add @apollo/client graphql
@apollo/client
패키지는 상태 관리/캐시와 오류 처리를 포함하고 graphql
은 GraphQL 조회를 해석한다.
현재 이 패키지를 설치했습니다. GraphQL 포트와의 통신에 필요한 구축 블록을 만들 것입니다.
Apollo 클라이언트를 사용하여 데이터 가져오기
고객 설정
Apollo 클라이언트는 연결 세부 사항을 지정하는 대상입니다.ApolloClient
을 만들려면 다음 매개변수를 구조 함수에 설정해야 합니다.
yarn create react-app apollo-client-react-typescript --template typescript
yarn add @apollo/client graphql
고객 설정
Apollo 클라이언트는 연결 세부 사항을 지정하는 대상입니다.
ApolloClient
을 만들려면 다음 매개변수를 구조 함수에 설정해야 합니다.uri
: ApolloClient
을 사용할 때 조회할 GraphQL URLcache
: Apollo 클라이언트가 컴퓨터에 결과를 저장하는 방법을 알려주는 캐시 구성 const client = new ApolloClient({
uri: 'https://api.spacex.land/graphql/',
cache: new InMemoryCache()
});
아폴로 회사를 세우다
React 구성 요소에서 이 Apollo 클라이언트 실례를 사용할 수 있도록, 우리는
ApolloProvider
이라는 특정 구성 요소로 React 구성 요소를 포장해야 한다.그것은 client
, ApolloClient
의 실례를 받아들인다.Apollo Provider를 React 어셈블리에 연결
지금은
ApolloClient
의 실례를 ApolloProvider
구성 요소에 전달할 때다.가장 좋은 방법은 최고급 구성 요소(예를 들어 우리 프로그램의
index.tsx
)를 사용하면 모든 하위 구성 요소가 같은 공급자를 통해 Apollo 클라이언트에 접근할 수 있다.index.tsx
의 주요 구성 요소를 열어 ApolloProvider
의 인스턴스를 ApolloClient
으로 포장합니다.import App from './App';
import { ApolloProvider } from '@apollo/client/react';
import { ApolloClient, InMemoryCache } from '@apollo/client';
const client = new ApolloClient({
uri: 'https://api.spacex.land/graphql/',
cache: new InMemoryCache()
});
ReactDOM.render(
<React.StrictMode>
<ApolloProvider client={client}>
<App />
</ApolloProvider>
</React.StrictMode>,
document.getElementById('root')
);
Apollo 클라이언트 및 TypeScript를 사용하여 데이터 조회
현재, 우리는
App
으로 ApolloProvider
React 구성 요소를 포장하였으며, 우리는 약간의 조회를 진행할 준비가 되어 있다.GraphiQL은 GraphiQL 인터페이스 덕분에 GraphiQL API를 발견하는 간단한 방법을 제공했다.질의할 항목이 아직 결정되지 않은 경우 SpaceX API의 대화형 브라우저 https://api.spacex.land/graphql/을 참조하십시오.
id, 이름, 위키백과 링크, 스페이스X 로켓에 대한 간략한 설명을 되돌려 주는 검색어를 만들고 싶습니다.
GraphQL 문법에 익숙하지 않다면 https://graphql.org/learn/queries/을 방문하는 것을 권장합니다.
질의는 다음과 같습니다.
{
rockets {
id
name
wikipedia
description
}
}
단일 로켓의 유형을 설명합니다.interface RocketData {
id: string;
name: string;
wikipedia: string;
description: string;
}
잊지 마세요. 우리는 이곳에서 일련의 로켓을 수신할 것이기 때문에 우리도 그것을 위해 유형을 만들 것입니다.interface RocketsResult {
rockets: Array<RocketData>;
}
이 질의를 실행하려면 Apollo 클라이언트에서 제공하는 useQuery
훅과 gql
함수를 사용합니다.import { useQuery, gql } from '@apollo/client';
const ROCKETS = gql`
rockets {
id
name
wikipedia
description
}
`;
function App() {
const { loading, error, data } = useQuery<RocketsResult>(ROCKETS);
return (
<>
<h1>SpaceX Rockets</h1>
{loading || !data ? (<p>Loading...</p>) :
data.rockets.map(rocket => (
<div key={rocket.id}>
<h2><a href={rocket.wikipedia}>{rocket.name}</a></h2>
<p>{rocket.description}</p>
</div>
))
}
</>
);
}
export default App;
useQuery
의 첫 번째 유형은GraphQL 단점에서 수신할 데이터 구조에 대응하는 유형입니다.useQuery
갈고리는 다음과 같은 속성을 가진 대상을 되돌려줍니다.loading
: Apollo 클라이언트가 질의 결과를 기다리고 있는지 여부를 나타냅니다.error
: 질의에 오류가 발생한 경우data
:GraphQL 쿼리 결과현재
yarn start
으로 프로그램을 실행할 수 있습니다. 브라우저에서 비슷한 내용을 볼 수 있을 것입니다.Apollo 클라이언트를 사용하여 데이터 수정
이제 Apollo 클라이언트를 사용하여 데이터를 얻는 방법을 알았습니다. GraphQL 포트의 다른 쪽에서 데이터를 업데이트하는 방법을 보게 되어 기쁩니다.
SpaceX API는 사용자를 추가하기 위한 간단한 인터페이스를 제공합니다.
변형 질의를 작성할 때 질의와 동일한 gql
함수를 사용합니다.
const ADD_USER = gql`
mutation InsertUser($name: String!) {
insert_users(objects: { name: $name }) {
returning {
id
name
}
}
}
`;
검색과 달리 서명과 유사한 기능이 있다는 것을 알 수 있을 것이다.insert_user
이면 objects: { name: $name }
을 받는다.
이 변이에서 얻은 데이터 형식을 설명하기 위해 스크립트 형식을 정의합니다.이러한 유형은 GraphQL 엔드포인트에서 응답을 포맷하는 방법에 따라 크게 달라집니다.우리의 사례에서 유형은 다음과 같다.
interface UserDetails {
id: string;
name: string;
}
interface AddUserResponse {
returning: Array<UserDetails>;
}
useMutation
쿼리에는 다음과 같은 서명이 있습니다.
const [addUser, { data: userData }] = useMutation<
{ insert_users: AddUserResponse }
>(ADD_USER);
중요한 것은 우리가 갈고리를 정의할 때 돌연변이를 사용하지 않는다는 것이다.이것은 함수를 되돌려줍니다. 예를 들면 addUser
입니다. 우리는 필요한 매개 변수를 사용하여 이 함수를 호출해야 합니다.userQuery
갈고리와 같이 useMutation
으로 전송되는 유형은 이 변수를 호출한 후 서버에서 돌아오는 응답과 일치해야 합니다.
이제 이 모든 것을 함께 놓아두자.
interface UserDetails {
id?: string;
name: string;
}
interface AddUserResponse {
returning: Array<UserDetails>;
}
function App() {
const [name, setName] = useState('');
const [addUser, { data: userData }] = useMutation<
{ insert_users: AddUserResponse }
>(ADD_USER);
function handleOnChange(e: React.ChangeEvent<HTMLInputElement>) {
setName(e.target.value);
}
async function handleOnSubmit(e: React.FormEvent) {
e.preventDefault();
await addUser({ variables: { name }});
setName('');
}
return (
<>
<h1>Users</h1>
<form onSubmit={handleOnSubmit}>
<label htmlFor="username">Name: </label>
<input required name="username" type="text" onChange={handleOnChange} value={name}/>
<button type="submit">Add User</button>
<p>
New User ID: {userData && userData.insert_users.returning[0].id}
</p>
</form>
</>
);
}
다음은 브라우저에서 볼 내용입니다.
축하합니다. SpaceX API 데이터베이스에 새 사용자가 추가되었습니다.
이 프레젠테이션 항목은 GitHub에서 사용할 수 있습니다.
다음은요?Apollo GraphQL의 기능에 대해 더 알고 싶으시면 Subscriptions 인터페이스와 Fragments 논리를 살펴보시기 바랍니다.
일부 프로젝트에서 GraphQL을 사용하고 계십니까?너는 그것이 다른 것을 대체할 것이라고 생각하니?
Reference
이 문제에 관하여(자습서: Apollo 클라이언트 및 React 및 TypeScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/akoskm/tutorial-apollo-client-with-react-and-typescript-572m
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const ADD_USER = gql`
mutation InsertUser($name: String!) {
insert_users(objects: { name: $name }) {
returning {
id
name
}
}
}
`;
interface UserDetails {
id: string;
name: string;
}
interface AddUserResponse {
returning: Array<UserDetails>;
}
const [addUser, { data: userData }] = useMutation<
{ insert_users: AddUserResponse }
>(ADD_USER);
interface UserDetails {
id?: string;
name: string;
}
interface AddUserResponse {
returning: Array<UserDetails>;
}
function App() {
const [name, setName] = useState('');
const [addUser, { data: userData }] = useMutation<
{ insert_users: AddUserResponse }
>(ADD_USER);
function handleOnChange(e: React.ChangeEvent<HTMLInputElement>) {
setName(e.target.value);
}
async function handleOnSubmit(e: React.FormEvent) {
e.preventDefault();
await addUser({ variables: { name }});
setName('');
}
return (
<>
<h1>Users</h1>
<form onSubmit={handleOnSubmit}>
<label htmlFor="username">Name: </label>
<input required name="username" type="text" onChange={handleOnChange} value={name}/>
<button type="submit">Add User</button>
<p>
New User ID: {userData && userData.insert_users.returning[0].id}
</p>
</form>
</>
);
}
Reference
이 문제에 관하여(자습서: Apollo 클라이언트 및 React 및 TypeScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/akoskm/tutorial-apollo-client-with-react-and-typescript-572m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)