Typesafe, Fullstack React 및 GraphQL with AWS Amplify
자원
훑어보러 갑니다the slides, which are available here.
이 데모용 GitHub 저장소: https://github.com/sw-yx/talk-typesafe-fullstack-react-demo-cms
또한 이미 AWS Amplify CLI setup and configured 이 있다고 가정합니다.
라이브코드 데모 스크립트
먼저 미리 만들어진 React + TypeScript 앱을 복제하고 AWS Amplify 프로젝트로 초기화합니다.
git clone https://github.com/sw-yx/talk-typesafe-fullstack-react-demo-cms
cd talk-typesafe-fullstack-react-demo-cms
yarn
amplify init # select defaults for everything
이 시점에서 모의 데이터가 포함된 간단한 앱이 있습니다.
이는 React 및 TypeScript를 사용하여 강력한 형식의 프런트엔드를 제공합니다! React와 TypeScript를 잘 사용하는 방법을 배우고 싶다면 제가 !
React 및 TypeScript 치트 시트 GraphQL 데이터베이스 추가
이제 Amplify 및 AWS AppSync를 사용하여 프런트엔드를 보완하기 위해 강력한 유형의 백엔드를 추가합니다.
amplify add api
# choose the graphql option and defaults for the rest
? Please select from one of the below mentioned services: GraphQL
? Provide API name: myapiname
? Choose the default authorization type for the API API key
? Enter a description for the API key:
? After how many days from now the API key should expire (1-365): 7
? Do you want to configure advanced settings for the GraphQL API No, I am do
ne.
? Do you have an annotated GraphQL schema? No
? Choose a schema template: Single object with fields (e.g., “Todo” with ID,
name, description)
The following types do not have '@auth' enabled. Consider using @auth with @model
- Todo
Learn more about @auth here: https://docs.amplify.aws/cli/graphql-transformer/directives#auth
GraphQL schema compiled successfully.
? Do you want to edit the schema now? Yes
GraphQL SDL을 사용하여 데이터베이스 스키마를 정의합니다.
# amplify/backend/api/myapiname/schema.graphql
type Blog @model {
id: ID!
title: String!
image: String!
body: String!
}
@model
AppSync에서
이라는 라이브러리를 통해 GraphQL 모델과 함께 인프라를 프로비저닝하는 데 사용하는 특별한 GraphQL 지시문이 있습니다. 백엔드에 추가할 수 있는 @auth
, @searchable
, @function
및 @predictions
와 같이 직접 탐색할 수 있는 더 많은 기능이 있습니다.AWS에서 이 인프라를 프로비저닝하는 데는 시간이 오래 걸리므로 나머지 앱에서 작업하는 동안 백그라운드에서 시작할 것입니다.
amplify push -y # skips the yes check
GraphQL 변환 백엔드를 프런트엔드에 연결
우리는 홈 스트레치에 있습니다. 프런트엔드에서 상호 작용하려면
aws-amplify
라이브러리가 필요합니다.yarn add -D aws-amplify
amplify init
동안 aws-exports.js
파일이 src
폴더에 생성되었으며 백엔드에 대한 일부 비비밀 정보가 포함되어 있습니다. 이를 사용하여 앱을 AWS Amplify와 연결합니다.// // src/index.tsx
// the other imports
import Amplify from 'aws-amplify';
import awsconfig from './aws-exports';
Amplify.configure(awsconfig);
// rest of the app
또한
amplify push
동안 src/graphql
에 많은 GraphQL 쿼리가 포함된 자동 생성된 폴더가 있음을 알 수 있습니다. 우리는 이것을 우리 앱에서 사용할 것입니다!첫 번째 선택적 단계 - 유형 및 자동 가져오기가 작동하도록 typescript를 생성하도록 codegen을 구성할 수 있습니다.
amplify codegen configure
? Choose the code generation language target typescript
? Enter the file name pattern of graphql queries, mutations and subscriptions src/
graphql/**/*.ts
? Enter the file name for the generated code src/API.ts
? Enter maximum statement depth [increase from default if your schema is deeply nested] 2
그런 다음 앱에서
listBlogs
쿼리를 사용합니다!// src/App.tsx
import { API } from 'aws-amplify'; // new
import { listBlogs } from "./graphql/queries"; // new
// other imports here
function App() {
// new
React.useEffect(fetchBlogs);
function fetchBlogs() {
const query = API.graphql({ query: listBlogs }) as Promise<any>
query.then(
({
data: {
listBlogs: { items },
},
}) => setBlogs(items)
);
}
// etc
}
이렇게 하면 앱이 다시 렌더링될 때마다 백엔드에서 새로고침하도록 블로그 항목이 설정됩니다.
그런 다음 블로그를 추가하고 업데이트하기 위해 동일한 작업을 수행합니다.
// make sure to import createBlog and updateBlog
async function addBlog(values: Blog) {
const timestamp = new Date();
const newBlog: Blog = {
...values,
id: uuidv4(),
createdAt: timestamp,
updatedAt: timestamp,
};
setBlogs([...blogs, newBlog]);
await API.graphql({query: createBlog, variables: {input: values}}) // NEW!
}
function _updateBlog(oldValues: Blog) {
return async function (newValues: Blog) {
const timestamp = new Date();
const newBlog: Blog = {
...newValues,
createdAt: oldValues.createdAt,
updatedAt: timestamp,
};
setBlogs([...blogs.filter((x) => x.id !== oldValues.id), newBlog]);
const { createdAt, updatedAt, ...input } = newBlog; // NEW!
await API.graphql({ query: updateBlog, variables: { input } }); // NEW!
};
}
그리고 당신은 그것을 가지고 있습니다! 엔드 투 엔드 타입 앱의 기본!
여기에서 앱의 완성된 버전 을 볼 수 있으며 슬라이드는 https://github.com/sw-yx/talk-react-summit-demo-cms/blob/withAWS/src/App.tsx입니다.
here
질문이 있으실 거라 확신합니다. 질문을 들어봅시다!
Reference
이 문제에 관하여(Typesafe, Fullstack React 및 GraphQL with AWS Amplify), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/swyx/typesafe-fullstack-react-graphql-with-aws-amplify-b3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)