+GraphQL-Type-script-2の起動
ライブラリをインストールしてCSS操作を避ける材料UI取付 src/gql/signup.gql.tsファイル の作成
GraphQLクエリー構文については、公式ホームページを参照してください.
https://graphql.org/learn/
src/pages/SignUp.tsxの作成
Hookを使用するため、email、password、nameをusStateに初期化できます. Box、TextFieldはMaterial UIのコンポーネントでCSSを使わなくてもきれいです. useMutation、usQueryなどは@apollo/clientが提供するコンポーネントで、grqphqlをhookのように使用するのに役立ちます. ログイン機能 Home.tsx修正 の電子メールとパスワードを入力できる場所とボタンを作成します. ログイン画面に入力されたパラメータをサーバに送信し、その値をサーバがデータベースに保存しているemailとパスワードと比較してログイン処理を行う. 新しく書かれたuseLazyQueryは、useQueryの役割と似ています. userQueryは、構成部品のマウントおよびレンダリング時に を自動的に実行します. userLazyQuery特定動作実行時に を実行
fetchPolicyオプションとは?
Apollo Clientはサーバからデータを受信し、これらのデータをキャッシュに入れて同じクエリーを要求すると、キャッシュに格納されているデータを再利用したり、新しい利用可能なキャッシュで指定したりすることができます.
詳細については、下のリンクを参照してください.
https://www.apollographql.com/docs/react/data/queries/#setting-a-fetch-policy
CRUDの作成に必要なサーバー側コード
npm install @mui/material @emotion/react @emotion/styled
会員登録ページimport { gql } from "@apollo/client";
export const POST_USER = gql`
mutation PostUser(
$email: String!
$password: String!
$name: String!
) {
postUser(
email: $email
password: $password
name: $name
) {
email
}
}
`;
GraphQLクエリー構文については、公式ホームページを参照してください.
https://graphql.org/learn/
src/pages/SignUp.tsxの作成
import React, { useState } from "react";
import Box from '@mui/material/Box';
import TextField from '@mui/material/TextField';
import Button from '@mui/material/Button';
import { POST_USER } from "../gql/signup.gql";
import { useMutation } from "@apollo/client";
import { useNavigate } from "react-router-dom";
function SignUp() {
const navigate = useNavigate();
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [name, setName] = useState('');
const [postUserMutation] = useMutation(POST_USER);
const onSignUp = async (e: any) => {
e.preventDefault();
try {
const {
data: { postUser },
} = await postUserMutation({
variables: {
email,
password,
name,
},
});
if (postUser) {
alert("회원가입 성공!");
navigate("/");
}
} catch (error: any) {
console.error(`onSignUp Error = ${error}`);
}
}
return (
<div>
<Box
onSubmit={onSignUp}
component="form"
sx={{
'& > :not(style)': { m: 1, width: '25ch' },
}}
noValidate
autoComplete="off"
>
<TextField id="standard-email-input" label="Email" variant="standard" value={email} onInput={(e:any) => setEmail(e.target.value)} />
<TextField id="standard-password-input" type="password" label="Password" variant="standard" value={password} onInput={(e:any) => setPassword(e.target.value)} />
<TextField id="standard-name-input" label="Name" variant="standard" value={name} onInput={(e:any) => setName(e.target.value)} />
<Button variant="text" type="submit">Sign Up</Button>
</Box>
</div>
);
}
export default SignUp;
import React, { useState } from "react";
import Box from '@mui/material/Box';
import TextField from '@mui/material/TextField';
import Button from '@mui/material/Button';
import { Link } from "react-router-dom";
import { GET_USER } from "../gql/home.gql";
import { useLazyQuery } from "@apollo/client";
function Home() {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [onSignIn, {loading, error}] = useLazyQuery(GET_USER, {
fetchPolicy: "cache-and-network",
onError: error => {
console.error(error);
alert(error.message);
},
onCompleted: ({getUser}) => {
console.log(getUser);
}
});
return (
<div>
<Box
component="form"
sx={{
'& > :not(style)': { m: 1, width: '25ch' },
}}
noValidate
autoComplete="off"
>
<TextField id="standard-email-input" label="Email" variant="standard" value={email} onInput={(e:any) => setEmail(e.target.value)} />
<TextField id="standard-password-input" type="password" label="Password" variant="standard" value={password} onInput={(e:any) => setPassword(e.target.value)} />
<Button variant="text" onClick={() => onSignIn({variables: {email, password}})}>Sign In</Button>
<Button variant="text">
<Link to="/signup" style={{ textDecoration: 'none', color: '#1976d2' }}>Sign Up</Link>
</Button>
</Box>
</div>
);
}
export default Home;
fetchPolicyオプションとは?
Apollo Clientはサーバからデータを受信し、これらのデータをキャッシュに入れて同じクエリーを要求すると、キャッシュに格納されているデータを再利用したり、新しい利用可能なキャッシュで指定したりすることができます.
詳細については、下のリンクを参照してください.
https://www.apollographql.com/docs/react/data/queries/#setting-a-fetch-policy
CRUDの作成に必要なサーバー側コード
Reference
この問題について(+GraphQL-Type-script-2の起動), 我々は、より多くの情報をここで見つけました https://velog.io/@mkh1213/React-GraphQL-Typescript-시작하기-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol