Welcome to the GraphQL workshop for React developers! ☀️
In this workshop, we'll be building a Twitter clone using GraphQL and React. We'll be using GraphQL Yoga for the GraphQL server and Apollo Client for the React app.
- 🌱 Learn GraphQL basics
- 🥑 Build GraphQL queries & mutations
- 🥝 Get familiar with the GraphQL client
- 🍇 Implement queries & mutations on the client
- 🔑 Access control & authorization
- 🎛 Production deployment
- Get started by cloning this repo and installing the dependencies:
git clone https://github.com/glennreyes/react-graphql-workshop.git
cd react-graphql-workshop
pnpm install
- Start the development servers:
pnpm dev
- Open GraphiQL at http://localhost:4000/graphql and the React app at http://localhost:3000.
- GraphiQL
- Schema
- Types
- Resolvers
Create a query hello
that takes an argument name
. Based on what the user inputs, return a greeting. For example, if the user inputs Glenn
, return Hello Glenn!
.
String
Int
Float
Boolean
ID
type Person { id: ID! # Not nullable name: String # Nullable age: Int weight: Float isOnline: Boolean posts: [Post!]! # Not nullable (but empty list is fine) } type Post { id: ID! slug: String! text: String! } type Query { allPersons: [Person!]! personById(id: ID!): Person allPosts: [Post!]! postBySlug(slug: String!): Post } type Mutation { createPost(message: String!): Post! }
(parent, args, context, info) => result;
- 💎 Implement
allPosts
query - 💎 Implement
me
query - 💎 Implement
user
query
- 💎 Implement
createPost
mutation - 💎 Implement
deletePost
mutation - 💎 Implement
updateUser
mutation
Query & mutation field:
- https://pothos-graphql.dev/docs/guide/queries-and-mutations
- https://pothos-graphql.dev/docs/api/schema-builder#queryfieldname-field
- https://pothos-graphql.dev/docs/api/schema-builder#mutationfieldname-field
Make sure you're in the
server
directory:pnpm prisma migrate reset --skip-generate # Reset database pnpm prisma db push # Push prisma schema to database pnpm prisma generate # Generate Prisma client pnpm seed # Seed database with fake data
- Implement query in
user-avatar.tsx
- Implement query in
home-feed.tsx
- Implement queries in
profile-page.tsx
- Implement query in
edit-profile.tsx
Use
useSuspenseQuery
from@apollo/experimental-nextjs-app-support/ssr
to fetch data on the server.
- Implement mutation in
create-post-form.tsx
- Implement mutation in
delete-post-dialog.tsx
- Implement mutation in
edit-profile.tsx
Use
useMutation
from@apollo/client