๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[PROJECT] ๋‚ด์ผ์˜ ์ง‘

#5. ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ ๊ตฌํ˜„

#5-0 ๋“ค์–ด๊ฐ€๋Š” ๋ง


 ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ฒ˜์Œ์—” ์™ ์ง€ ์กฐ๊ธˆ ์–ด๋ ค์šธ๊บผ ๊ฐ™์•„์„œ ์ผ๋‹จ ํ˜ผ์ž ์‹œ๋„ํ•ด๋ณด๊ณ  ์•ˆ๋˜๋ฉด ๊ตฌ๊ธ€๋ง ํ•ด๋ณด์ž ์‹ถ์—ˆ๋‹ค. ๊ทผ๋ฐ ์›ฌ๊ฑธ ์„ฑ๊ณตํ–ˆ๋‹ค. ์ฝฉ๋‚˜๋ฌผ ์ฒ˜๋Ÿผ ๋‚˜๋„ ์กฐ๊ธˆ์”ฉ ์ž๋ผ๊ณ  ์žˆ๋‚˜๋ณด๋‹ค. ๋ฟŒ๋“ฏ!

 


#5-1 ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ ์„ค๊ณ„

 

1) ์ „์ฒด๋™์˜ ์ฒดํฌ ์‹œ ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ž๋™์ฒดํฌ

2) ์ „์ฒด๋™์˜ ์ฒดํฌํ•ด์ œ ์‹œ ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ž๋™ ์ฒดํฌํ•ด์ œ

3) ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ฒดํฌ ์‹œ ์ „์ฒด๋™์˜ ์ž๋™์ฒดํฌ

4) ์ „์ฒด๋™์˜ + ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ฒดํฌ๋œ ์ƒํƒœ์—์„œ ์„ธ๋ถ€ํ•ญ๋ชฉ 1๊ฐœ

์ฒดํฌํ•ด์ œ ์‹œ ์ „์ฒด๋™์˜ ์ž๋™ ์ฒดํฌํ•ด์ œ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


#5-2 ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ  ๊ตฌํ˜„

 

1) ์ฒดํฌ๋ฐ•์Šค์˜ checked ์†์„ฑ๊ฐ’์ธ true / false ๋ฅผ useState๋ฅผ ์ด์šฉํ•˜์—ฌ ์ €์žฅ ๋ฐ ๋ณ€๊ฒฝํ•จ.
2) ๊ธฐ๋Šฅ 1๋ฒˆ๊ณผ 2๋ฒˆ์€ ํ•ด๋‹น ์ฒดํฌ๋ฐ•์Šค์˜ onChange ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•จ. (์ด๋•Œ onClick์œผ๋กœ ํ•ด๋„ ์ž‘๋™๋˜๊ธด ํ•จ)

3) ๊ธฐ๋Šฅ 3๋ฒˆ๊ณผ 4๋ฒˆ์€ useEffect๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•จ. ์œ„์˜ onchange ์ด๋ฒคํŠธ๋กœ๋Š” ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ๊ฐ€ ๋ชจ๋‘ ์ฒดํฌ๋œ ์ฆ‰์‹œ ์ „์ฒด๋™์˜๊ฐ€ ์ž๋™์ฒดํฌ๋˜์ง€ ์•Š์œผ๋‚˜, useEffect๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋‘ ์ฒดํฌ๋œ ๋•Œ(์—…๋ฐ์ดํŠธ)๋ฅผ ์บ์น˜ํ•ด ์ฆ‰์‹œ ์ „์ฒด๋™์˜๊ฐ€ ์ž๋™์ฒดํฌ๋œ๊ฒŒ ๋œ๋‹ค.

 

import React, {useState, useEffect}  from 'react';
import styles from './Join.module.scss';

function JoinPresenter(){

  const [allCheck, setAllCheck] = useState(false);
  const [ageCheck, setAgeCheck] = useState(false);
  const [useCheck, setUseCheck] = useState(false);
  const [marketingCheck, setMarketingCheck] = useState(false);

  const allBtnEvent =()=>{
    if(allCheck === false) {
      setAllCheck(true);
      setAgeCheck(true);
      setUseCheck(true);
      setMarketingCheck(true);
    }else {
      setAllCheck(false);
      setAgeCheck(false);
      setUseCheck(false);
      setMarketingCheck(false);
    } 
  };
  
  const ageBtnEvent =()=>{
    if(ageCheck === false) {
      setAgeCheck(true)
    }else {
      setAgeCheck(false)
    }
  };
  
  const useBtnEvent =()=>{
    if(useCheck === false) {
      setUseCheck(true)
    }else {
      setUseCheck(false)
    }
  };
  
  const marketingBtnEvent =()=>{
    if(marketingCheck === false) {
      setMarketingCheck(true)
    }else {
      setMarketingCheck(false)
    }
  };

  useEffect(()=>{
    if(ageCheck===true && useCheck===true && marketingCheck===true){
      setAllCheck(true)
    } else {
      setAllCheck(false)
    }
  }, [ageCheck,useCheck, marketingCheck])


  return (
    <form method="post" action="" className={styles.form}>
      <div className={styles.form_agreement}>
        <label className={styles.form_agreement_title}>
        	์•ฝ๊ด€๋™์˜
        </label>
        <div className={styles.form_agreement_box}>
        	<div className={styles.form_agreement_all}>
        		<input type="checkbox" id="all-check" checked={allCheck} onChange={allBtnEvent}/>
        		<label for="all-check">์ „์ฒด๋™์˜</label>
        	</div>
        	<div className={styles.form_agreement_item}>
        		<input type="checkbox" id="check1" checked={ageCheck} onChange={ageBtnEvent}/>
        		<label for="check1">๋งŒ 14์„ธ ์ด์ƒ์ž…๋‹ˆ๋‹ค <span className={styles.blue}>(ํ•„์ˆ˜)</span></label>
        	</div>
        	<div className={styles.form_agreement_item}>
        		<input type="checkbox" id="check2" checked={useCheck}  onChange={useBtnEvent}/>
        		<label for="check2">์ด์šฉ์•ฝ๊ด€ <span className={styles.blue}>(ํ•„์ˆ˜)</span></label>
        	</div>
        	<div className={styles.form_agreement_item}>
        		<input type="checkbox" id="check3" checked={marketingCheck}  onChange={marketingBtnEvent}/>
        		<label for="check3">๋งˆ์ผ€ํŒ… ๋™์˜ <span className={styles.gray}>(์„ ํƒ)</span></label>
        	</div>
        </div>
      </div>
      <button type="submit" className={`${styles.btn_primary} ${styles.btn_55} ${styles.btn_submit}`}>
      	ํšŒ์›๊ฐ€์ž…ํ•˜๊ธฐ
      </button>
    </form>
  )
}

export default JoinPresenter;