๐Ÿ–ฅFrontEnd/React

๋ฆฌ์•กํŠธ useEffect์—์„œ ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์˜์กด์„ฑ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒƒ

hellohailie 2022. 7. 24. 17:48

 

๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ์žฌํ‰๊ฐ€ ํ›„์— ํŠน์ • ์˜์กด์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ => ์˜์กด์„ฑ ๋ฐฐ์—ด์— ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. 

 

๊ธฐ์กด ์ฝ”๋“œ

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);
  };
  
  ...

 

ํ•˜์ง€๋งŒ ์œ„์˜ ์ฝ”๋“œ๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— (๊ทธ์ € ๋นˆ ๋ฐฐ์—ด)์ดํŽ™ํŠธ๊ฐ€ ์ƒˆ๋กœ ์‹คํ–‰๋  ๋•Œ ๋”ฑ ํ•œ๋ฒˆ ์‹คํ–‰๋œ๋‹ค. 

์—ฌ๊ธฐ์„œ setFormIsValid()๋ฅผ ์žฌํ‰๊ฐ€ํ•˜๊ณ  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ state ์„ค์ • ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฉ”์ผ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ํ•ธ๋“ค๋Ÿฌ์˜ ๋ชจ๋“  ํ‚ค ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ!
 
tip!
 
์˜์กด์„ฑ ๋ฐฐ์—ด์ด ์•„์˜ˆ ์—†๋Š” ๊ฒฝ์šฐ ([]) ์ด๋Ÿฐ ์‹์œผ๋กœ ๋นˆ ๋ฐฐ์—ด์กฐ์ฐจ ์—†๋Š” ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ์‹คํ–‰๋œ๋‹ค. 
๊ทธ๋ฆฌ๊ณ  ์•ˆ์— state๋ฅผ ์„ค์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— (setFormIsValid()) ์žฌ๋žœ๋”๋ง ์ฃผ๊ธฐ ์ž์ฒด๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด์„œ ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 
 
 

์šฐ๋ฆฌ๊ฐ€ ์›ํ•  ๋•Œ ์ดํŽ™ํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธธ ์›ํ•œ๋‹ค๋ฉด ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. 

useEffect(() => {
    setFormIsValid(
      enteredEmail.includes("@") && enteredPassword.trim().length > 6
    );
  }, [setFormIsValid, enteredEmail, enteredPassword]);
 
๐Ÿ‘‰ ๋ชจ๋“  Login ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜ ์‹คํ–‰ ํ›„์— ์ด useEffect ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.
๋‹ค๋งŒ setFormIsValid, enteredEmail, enteredPassword ๊ฐ€ ๋งˆ์ง€๋ง‰ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์ฃผ๊ธฐ์—์„œ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ์š”!

์‚ฌ์‹ค setFormIsValid ๋Š” ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค. ์™œ๋ƒ๋ฉด state ์—…๋ฐ์ดํŠธ ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆฌ์•กํŠธ์— ์˜ํ•ด ์ ˆ๋Œ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

sideEffect๋Š” ๋ณดํ†ต HTTP ๋ฆฌํ€˜์ŠคํŠธ ๋“ฑ์ธ๋ฐ, ๋‹ค๋ฅธ ์˜ˆ ์ค‘์— ํ‚ค ์ž…๋ ฅ์„ ๋“ฃ๊ณ  ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋„ ์žˆ๊ณ , (emailChangeHandler)

๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋‹ค๋ฅธ ์•ก์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค. ์ฆ‰, ์ด๋ฉ”์ผ ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ์˜ ํ‚ค ์ž…๋ ฅ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ํ•ด๋‹น ํผ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ sideEffect๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ sideEffect ์ด๋‹ค. 

 

์–ด๋–ค ์•ก์…˜์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์•ก์…˜์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ์ด๋‹ค. ๊ทธ๋•Œ useEffect๊ฐ€ ๋„์›€์ด ๋œ๋‹ค. 

 

 

์ถ”๊ฐ€๊ณต๋ถ€

์˜์กด์„ฑ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒƒ

 

1. ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜ // react๊ฐ€ ์ ˆ๋Œ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•จ

2. ๋‚ด์žฅ API ๋˜๋Š” ํ•จ์ˆ˜ ex) fetch(), localStorage

3. ์™ธ๋ถ€์—์„œ ์ •์˜ํ•œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜

 

 

 

๐Ÿ˜ƒ ์ž˜๋ชป๋œ ๊ฐœ๋… ์ „๋‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €์˜ ์„ฑ์žฅ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค๐Ÿค“