const Auth = () => (
<div>
<h1>๋ก๊ทธ์ธ ํ์ด์ง</h1>
<p>๋ก๊ณ ๋ฃ๊ธฐ</p>
<form>
<input type="email" placeholder="Email" required></input>
<input type="password" placeholder="Password" required></input>
<input type="submit" value="Login" />
</form>
<div>
<button>Continue with Google</button>
<button>Continue with GitHub</button>
</div>
</div>
);
export default Auth;

๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋จ ์ด๋ ๊ฒ ์์ฑํด ๋ณด์.
ํ์ฌ local๋ก ์งํํ๊ณ ์๋๋ฐ, ์๊น ์ ๋ ฅํ GitHub์ OAuth App์ ์ฝ๋ฐฑ url์ ๋ก์ปฌ์ด ์๋๋ค.
๊ทธ๋์ GitHub์ผ๋ก ๋ก๊ทธ์ธํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์ ๊ฑฐ๋ ๊ฒ์ ์ธ์งํ๊ณ ๋์ด๊ฐ์. ^3^
useState()๋ฅผ ์ฌ์ฉํ์ฌ input๊ณผ form์ state๋ฅผ ์ ์ฉํ์.
โ๏ธ ์ฌ๊ธฐ์ ์ ๊น! ํ์ดํ ํจ์ return ์ฐ๋ ์ฌ๋ถ ํ์ธํ๊ณ ๋์ด๊ฐ์.
//return ์์จ๋ ๋ const ๋ณ์๋ช = () = > (); // //return ์จ์ผ ํจ const ๋ณ์๋ช = () = > { return(); };
import { useState } from "react";
const Auth = () => {
//์ด๋ฉ์ผ๊ณผ ํจ์ค์๋ ๋๋ค useState()๋ฅผ ์ฌ์ฉํ์ฌ state๊ฐ์ ์ฌ์ฉํ์.
//๋ํดํธ ๊ฐ์ ""์ผ๋ก ์
๋ ฅํ์.
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
//email, password์ ์ฌ์ฉํ๋ ์ด๋ฒคํธ
const onChange = (event) => {
console.log(event.target.name);
};
//form์ ์ฌ์ฉํ๋ ์ด๋ฒคํธ
const onSubmit = (event) => {
event.preventDefault();
};
return (
<div>
<h1>๋ก๊ทธ์ธ ํ์ด์ง</h1>
<p>๋ก๊ณ ๋ฃ๊ธฐ</p>
{/*form์ onSubmit ์ด๋ฒคํธ๋ฅผ ๋ฃ์ด์ค๋ค*/}
<form onSubmit={onSubmit}>
<input
type="email"
placeholder="Email"
required
{/*value์ state๊ฐ์ ๋ฃ์ด์ค๋ค.
name์ ์์ฑํ์ฌ event.target.name์ด ์ด๋ป๊ฒ ์ฝ์์ ์ฐํ๋์ง ํ์ธํด๋ณด์.
onChange ์ด๋ฒคํธ๋ฅผ ๋ฃ์ด์ค๋ค*/}
value={email}
name="email"
onChange={onChange}
></input>
<input
type="password"
placeholder="Password"
required
{/*value์ state๊ฐ์ ๋ฃ์ด์ค๋ค.
name์ ์์ฑํ์ฌ event.target.name์ด ์ด๋ป๊ฒ ์ฝ์์ ์ฐํ๋์ง ํ์ธํด๋ณด์.
onChange ์ด๋ฒคํธ๋ฅผ ๋ฃ์ด์ค๋ค*/}
value={password}
name="password"
onChange={onChange}
></input>
<input type="submit" value="Login" />
</form>
<div>
<button>Continue with Google</button>
<button>Continue with GitHub</button>
</div>
</div>
);
};
export default Auth;

Way 1.
์ด๋ ๊ฒ ๋ง์ด๋ค. if/else if ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ form์ ์ปจํธ๋กค ํด๋ณด์.
name์ด "email"์ด๋ฉด setEmail()๋ก value๋ณด๋ด์ email state๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , name์ด "password"์ด๋ฉด setPassword()๋ก value๋ณด๋ด์ password state๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ๋๋ค.const onChange = (event) => { const { target: { name, value }, } = event; if (name === "email") { setEmail(value); } else if (name === "password") { setPassword(value); } };
Way 2.
์ด๋ ๊ฒ ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค๋ ๊ณ ์์ ๋๊ธ...!
์์ form state์์ ์ด๋ฉ์ผ, ํจ์ค์๋ ๊ฐ์ ์ ๋ฐ์ดํธ ํ๊ฒ ํ๋ ๊ทธ๋ฐ...ใ .ใ !!const [form, setForm] = useState({ email: "", password: "" }); const onChange = ({ target: { name, value } }) => setForm({ ...form, [name]: value });
Way 3.
if else if๋ก ๋ค์ค ์กฐ๊ฑด๋ฌธ ์ฐ๋ ๋์ ์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ํํํ ์๋ ์๋ค.
์ฝ๋ฉ์ ์ธ๊ณ๋ ๋ฌด๊ถ๋ฌด์งํ๊ตฌ๋ง...^.^!onChange={e => setEmail(e.target.value)} onChange={e => setPassword(e.target.value)}
๐ฅ ๊ฐ์ฅ ๋ณดํธ์ ์ธ Way.1์ผ๋ก ๊ฐ๋ ๊ฑธ๋ก ..^^!
import { useState } from "react";
const Auth = () => {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
//email, password์ ์ฌ์ฉํ๋ ์ด๋ฒคํธ
const onChange = (event) => {
const {
target: { name, value },
} = event;
if (name === "email") {
setEmail(value);
} else if (name === "password") {
setPassword(value);
}
};
//form์ ์ฌ์ฉํ๋ ์ด๋ฒคํธ
const onSubmit = (event) => {
event.preventDefault();
};
return (
<div>
<h1>๋ก๊ทธ์ธ ํ์ด์ง</h1>
<p>๋ก๊ณ ๋ฃ๊ธฐ</p>
<form onSubmit={onSubmit}>
<input
type="email"
placeholder="Email"
required
value={email}
name="email"
onChange={onChange}
></input>
<input
type="password"
placeholder="Password"
required
value={password}
name="password"
onChange={onChange}
></input>
<input type="submit" value="Login" />
</form>
<div>
<button>Continue with Google</button>
<button>Continue with GitHub</button>
</div>
</div>
);
};
export default Auth;
๋ก์ง
input(์ด๋ฉ์ผ ์ธํ/๋น๋ฒ ์ธํ)์ ๋ณ๊ฒฝํ ๋ ๋ง๋ค, onChange ์ด๋ฒคํธ๋ฅผ ํธ์ถํ๋ค.
onChange ์ด๋ฒคํธ๋ onChange ํ์
์ ํธ์ถํ๋ค.
onChange ํ์ ์ ํธ์ถ input์ ์ ๋ ฅํ ๊ฐ(event.target.value)์ ํ ๋๋ก ๋ค์๊ณผ ๊ฐ์ ํญ๋ชฉ์ด ์คํ๋๋ค.
name์ด email๊ณผ ๊ฐ์ ๊ฒฝ์ฐname์ด password์ ๊ฐ์ ๊ฒฝ์ฐ