[ 14부 ] GraphQL, Typescript 및 React를 사용하여 Twitter 복제본 만들기( Frontend 시작 )
참고로 저는 이렇게 하고 있습니다Tweeter challenge
Db diagram
약간의 프론트엔드
Frontend 부분은 React + Tailwindcss + Typescript를 사용하겠습니다. 방금 템플릿을 찾았으니 시도해 보겠습니다. 모든 것을 구성하지 않고 시간을 벌 수 있다면 ... 가져 가겠습니다 ^^. 디자인의 경우 devChallenges.io의 모든 챌린지는 Figma 파일을 제공하므로 처음부터 디자인을 시작할 필요가 없습니다. 당신은 감사 할 수 있습니다
.ltag__user__id__367332 .follow-action-button {
background-color: #2f80ed !important;
색상: #ffffff !중요;
border-color: #2f80ed !important;
}
Thu Nghiem
Creator of devchallenges.io, Software developer at Telia Finland
:디
npx create-react-app challenge_twitter_front --template tailwindcss-typescript
yarn start
모든 것이 작동하는 것 같습니다. 필요한 라이브러리를 더 추가해 보겠습니다.
yarn add @apollo/client graphql recoil react-hook-form @hookform/resolvers yup react-router-dom date-fns react-icons
시작하려면 일부 페이지와 함께 라우터를 추가해 보겠습니다.
src/App.tsx
import React from 'react'
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'
import Home from './pages/Home'
import Login from './pages/Login'
import Register from './pages/Register'
function App() {
return (
<Router>
<Switch>
<Route exact path="/login">
<Login />
</Route>
<Route exact path="/register">
<Register />
</Route>
<Route exact path="/">
<Home />
</Route>
</Switch>
</Router>
)
}
export default App
예를 들어 여기 제 등록 페이지가 있습니다.
src/페이지/Register.tsx
import React from 'react'
const Register = () => {
return <div>Register</div>
}
export default Register
사용자 등록
인증부터 시작하겠습니다. 유효성 검사를 위해 yup과 함께 react-hooker-form을 사용합니다. 그러나 등록 페이지에서 작업하기 전에 apolloClient를 생성해 보겠습니다.
src/클라이언트/index.ts
import { ApolloClient, InMemoryCache } from '@apollo/client'
const client = new ApolloClient({
uri: process.env.REACT_APP_BACKEND_URL || 'http://localhost:4000',
cache: new InMemoryCache(),
})
export default client
지금은 설명서를 따릅니다 ;). apolloClient에서 제공하는 일부 후크에 액세스하려면 앱을 ApolloProvider로 래핑합니다.
src/index.tsx
import { ApolloProvider } from '@apollo/client'
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import client from './client'
import './styles/index.css'
ReactDOM.render(
<ApolloProvider client={client}>
<App />
</ApolloProvider>,
document.getElementById('root')
)
모든 것이 예상대로 작동하는지 테스트하기 위해 내 등록 페이지에서 플레이하겠습니다 ;).
src/페이지/Register.ts
import { gql, useMutation } from '@apollo/client'
import React from 'react'
const REGISTER = gql`
mutation($input: RegisterPayload!) {
register(input: $input) {
token
user {
id
username
display_name
email
created_at
updated_at
}
}
}
`
const Register = () => {
const [register, { loading, data, error }] = useMutation(REGISTER)
return (
<div>
<button
onClick={() => {
register({
variables: {
input: {
username: 'new',
email: '[email protected]',
display_name: 'New',
password: 'password',
},
},
})
}}
>
Register
</button>
{loading && <div>Loading...</div>}
{data && <div>{data.register.user.username}</div>}
</div>
)
}
export default Register
서버를 시작하는 것을 잊지 말고 시도해 봅시다 ;).
멋진 ;). 클라이언트가 예상대로 작동하는 것 같습니다.
지금은 여기서 멈추고 다음 부분에서 사용자 등록 작업을 시작하겠습니다. ;).
차오 & 조심해 ;).
Reference
이 문제에 관하여([ 14부 ] GraphQL, Typescript 및 React를 사용하여 Twitter 복제본 만들기( Frontend 시작 )), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ipscodingchallenge/part-14-creating-a-twitter-clone-with-graphql-typescript-and-react-starting-the-frontend-4fml텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)