๋ชจ๋ ์ปดํฌ๋ํธ ์ฌํ๊ฐ ํ์ ํน์ ์์กด์ฑ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ => ์์กด์ฑ ๋ฐฐ์ด์ ์์กด์ฑ์ผ๋ก ์ถ๊ฐํ๋ฉด ๋๋ค.
๊ธฐ์กด ์ฝ๋
const Login = (props) => {
const [enteredEmail, setEnteredEmail] = useState("");
const [emailIsValid, setEmailIsValid] = useState();
const [enteredPassword, setEnteredPassword] = useState("");
const [passwordIsValid, setPasswordIsValid] = useState();
const [formIsValid, setFormIsValid] = useState(false);
const emailChangeHandler = (event) => {
setEnteredEmail(event.target.value);
setFormIsValid(
event.target.value.includes("@") && enteredPassword.trim().length > 6
);
};
const passwordChangeHandler = (event) => {
setEnteredPassword(event.target.value);
setFormIsValid(
event.target.value.includes("@") && enteredPassword.trim().length > 6
);
};
...
๐ useEffect๋ฅผ ์ฌ์ฉํด์ ํ ๊ณณ์์ ํ๋์ ๋ก์ง์ผ๋ก ํผ์ด ์ ํจํ์ง ๋๋ ์ ํจํ์ง ์์์ง ํ์ํ๊ธฐ
const Login = (props) => {
const [enteredEmail, setEnteredEmail] = useState("");
const [emailIsValid, setEmailIsValid] = useState();
const [enteredPassword, setEnteredPassword] = useState("");
const [passwordIsValid, setPasswordIsValid] = useState();
const [formIsValid, setFormIsValid] = useState(false);
useEffect(() => {
setFormIsValid(
enteredEmail.includes("@") && enteredPassword.trim().length > 6
);
}, []);
const emailChangeHandler = (event) => {
setEnteredEmail(event.target.value);
};
const passwordChangeHandler = (event) => {
setEnteredPassword(event.target.value);
};
...
ํ์ง๋ง ์์ ์ฝ๋๋ ์์กด์ฑ ๋ฐฐ์ด์ด ์๊ธฐ ๋๋ฌธ์ (๊ทธ์ ๋น ๋ฐฐ์ด)์ดํํธ๊ฐ ์๋ก ์คํ๋ ๋ ๋ฑ ํ๋ฒ ์คํ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ ๋ ์ดํํธ๊ฐ ์คํ๋๊ธธ ์ํ๋ค๋ฉด ์ฌ์ด๋ ์ดํํธ ํจ์์์ ์ฌ์ฉํ๋ ๊ฒ์ ์์กด์ฑ์ผ๋ก ์ถ๊ฐํ๋ฉด ๋๋ค.
useEffect(() => {
setFormIsValid(
enteredEmail.includes("@") && enteredPassword.trim().length > 6
);
}, [setFormIsValid, enteredEmail, enteredPassword]);
์ฌ์ค setFormIsValid ๋ ์๋ต๊ฐ๋ฅํ๋ค. ์๋๋ฉด state ์ ๋ฐ์ดํธ ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์กํธ์ ์ํด ์ ๋ ๋ณ๊ฒฝ๋์ง ์๋๋ก ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์ด๋ค.
sideEffect๋ ๋ณดํต HTTP ๋ฆฌํ์คํธ ๋ฑ์ธ๋ฐ, ๋ค๋ฅธ ์ ์ค์ ํค ์ ๋ ฅ์ ๋ฃ๊ณ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ๋ ์๊ณ , (emailChangeHandler)
๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๋ํ ์๋ต์ผ๋ก ๋ค๋ฅธ ์ก์ ์ ์คํํ๋ ๊ฒ๋ ์๋ค. ์ฆ, ์ด๋ฉ์ผ ๋๋ ๋น๋ฐ๋ฒํธ ํ๋์ ํค ์ ๋ ฅ์ ๋ํ ์๋ต์ผ๋ก ํด๋น ํผ์ ์ ํจ์ฑ์ ํ์ธํ๊ณ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ ๋ํ sideEffect๋ผ๊ณ ํ ์ ์๋ค. ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ sideEffect ์ด๋ค.
์ด๋ค ์ก์ ์ ๋ํ ์๋ต์ผ๋ก ์คํ๋๋ ์ก์ ์ด ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ฌ์ด๋ ์ดํํธ์ด๋ค. ๊ทธ๋ useEffect๊ฐ ๋์์ด ๋๋ค.
์ถ๊ฐ๊ณต๋ถ
์์กด์ฑ ๋ฐฐ์ด์ ์ถ๊ฐํ์ง ์์๋ ๋๋ ๊ฒ
1. ์ํ ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ ํ๋ ํจ์ // react๊ฐ ์ ๋ ๋ณ๊ฒฝ๋์ง ์๋๋ก ๋ณด์ฅํจ
2. ๋ด์ฅ API ๋๋ ํจ์ ex) fetch(), localStorage
3. ์ธ๋ถ์์ ์ ์ํ ๋ณ์๋ ํจ์