TIL

FE_JACOB ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปยท2021๋…„ 8์›” 1์ผ
0

Today I learned

๋ชฉ๋ก ๋ณด๊ธฐ
9/30

Today I learned

TIL. ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ

๐Ÿ“Œ ๋ฐฐ์—ด ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น

๊ฐ์ฒด ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ํ• ๋•Œ๋Š” const { value } = e.target ์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์คฌ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ๋ชฐ๋ž๋Š”๋ฐ ์ด๋ฒˆ๊ธฐํšŒ์— ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฐฐ์—ด๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์ฝ”๋“œ

const career = radioValue.career.split('~')[0];

์ด๋Ÿฐ์‹์œผ๋กœ ๋งจ๋’ค์— ๋ฐฐ์—ด์˜ ๋ช‡๋ฒˆ์งธ ์ž์‹์ธ์ง€ ์ •ํ•ด์คฌ๋‹ค.
ํ•˜์ง€๋งŒ, ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ํ•ด์ฃผ๋Š”๊ฒŒ ํ›จ์”ฌ ํŽธํ•˜๋‹ค.

๋ฐฐ์—ด ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ํ•œ ์ฝ”๋“œ

const [career] = radioValue.career.split('~');

๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ํ•œ ์ฒซ๋ฒˆ์งธ ๋ณ€์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ณ  ๊ทธ ๋‹ค์Œ์— ์จ์ฃผ๋ฉด ๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. ์•„์ฃผ ํŽธํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ฐ„๋‹จํ•˜๊ฑฐ๋‹ˆ๊นŒ ๊ธฐ์–ตํ•ด์•ผ์ง€ !

๐Ÿ“Œ ๋งตํ•‘

์–ด๋–ค ์กฐ๊ฑด์— ์˜ํ•ด์„œ ์†์„ฑ ๊ฐ’์ด ๋‹ฌ๋ผ์ ธ์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๋‚˜๋Š” ํ•ญ์ƒ if else ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์—์„œ๋Š” ์ค„์—ฌ์ค˜์•ผํ•˜๋Š”๋ฐ ๊ทธ ๋ฐฉ๋ฒ•์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋˜๊ฒƒ ๊ฐ™๋‹ค.

๋งตํ•‘ํ•˜๊ธฐ ์ „ ์ฝ”๋“œ

 if (answer.name === '0') {
          setRadioValue({ ...radioValue, gender: answer.id });
        } else if (answer.name === '1') {
          setRadioValue({ ...radioValue, age: answer.id });
        } else {
          setRadioValue({ ...radioValue, career: answer.id });

๋”ฑ ๋ด๋„ ์ด ์ฝ”๋“œ๋Š” ๊ต‰์žฅํžˆ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
answer.name ์˜ ๊ฐ’์ด 0, 1, 2์ผ๋•Œ๋งˆ๋‹ค ๊ทธ์— ๋งž๋Š” ๊ฐ์ฒด๊ฐ€ setState๋˜์–ด์•ผํ•˜๋Š”๋ฐ ์ข€ ๋” ๊ฐ„ํŽธํ•˜๊ณ  ํšจ์œจ์ ์ด๊ฒŒ ๋ฐ”๊ฟจ๋‹ค.

๋งตํ•‘ํ•œ ์ฝ”๋“œ

const getRadioValue = data => {
    const [question, value] = data;

    setRadioValue({ ...radioValue, [value]: question });
  };

๐Ÿ“Œ ๋งตํ•‘์šฉ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง„ ํ•จ์ˆ˜์—์„œ component return

๊ฐ€์žฅ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด์—ˆ๋‹ค.
๋งตํ•‘์šฉ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ํ–ˆ์ง€๋งŒ component๋ฅผ return ํ•˜๋Š” ํ•จ์ˆ˜๋ผ๋‹ˆ....
์–ด๋ ค์› ๋‹ค. ์•„๋‹ˆ, ํ•จ์ˆ˜์—์„œ component๋ฅผ return ํ•  ์ˆ˜๋Š” ์žˆ์—ˆ์ง€๋งŒ ๊ทธ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ž๋‹ค.
๊ทธ๋Ÿผ, ๊ทธ ํ•จ์ˆ˜๋ฅผ ๋ฐ‘์—์„œ ๋ฐ”๋กœ ์„ ์–ธํ•ด์ฃผ๋‚˜???๋ผ๋Š” ์‹์˜ ๊ถ๊ธˆ์ฆ์ด์žˆ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ•ด๋‹ต์„ ์ฐพ์•˜๋‹ค.

์›๋ž˜ ๋‚˜๋Š” currentQ๋ผ๋Š” count๋ฅผ ํ•ด์ฃผ๋Š” state๊ฐ€ ์žˆ์—ˆ๊ณ  ์งˆ๋ฌธ์ด ๋„˜์–ด๊ฐˆ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ ์งˆ๋ฌธ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ count ์˜€๋‹ค.

๋งตํ•‘ํ•˜๊ธฐ์ „

  {currentQ === 0 && (
     <Radio question={questionOne} getRadioValue={getRadioValue} />
                )}
  {currentQ === 1 && (
     <Radio question={questionTwo} getRadioValue={getRadioValue} />
                )}
  {currentQ === 2 && (
     <Radio question={questionThree} getRadioValue={getRadioValue}
                  />
                )}
  {currentQ === 3 && (
     <Select SelectData={SelectData} getSelectValue={getSelectValue}
                  />

์ด๋Ÿฐ์‹์œผ๋กœ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ˆซ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์†์„ฑ๊ฐ’์„ ์ „๋‹ฌํ•ด์คฌ๋‹ค. ๋‚˜๋„ ์ด ๋ฐฉ๋ฒ•์ด ๋˜๊ฒŒ ๋น„ํšจ์œจ์ ์ด๋ผ๋Š”๊ฒƒ์„ ์•Œ์ง€๋งŒ ํ–ˆ๋˜ ์ด์œ ๋Š” ์ด๊ฒŒ ํ™•์‹คํžˆ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ’์ด ๋”ฐ๋ผ์˜ค๊ฑฐ๋‚˜ ๋‚จ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์งˆ๋ฌธ์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๋งตํ•‘ํ•œ ์ฝ”๋“œ

  const renderByCurrentQuestion = currentQuestionIdx => {
    const questionMapper = {
      0: (
        <Radio
          radioValue={radioValue}
          question={questionOne}
          getRadioValue={getRadioValue}
        />
      ),
      1: (
        <Radio
          radioValue={radioValue}
          question={questionTwo}
          getRadioValue={getRadioValue}
        />
      ),
      2: (
        <Radio
          radioValue={radioValue}
          question={questionThree}
          getRadioValue={getRadioValue}
        />
      ),
      3: <Select SelectData={SelectData} getSelectValue={getSelectValue} />,
    };

    return (
      <S.SurveyLine>
        <S.RadioBox>{questionMapper[currentQuestionIdx]}</S.RadioBox>
      </S.SurveyLine>
    );
  };

๊ทธ๋ž˜์„œ ์•„์˜ˆ ๊ฐ์ฒด๋กœ ์ด ์ฝ”๋“œ๋“ค์„ ๋‹ค ์ €์žฅํ•ด ๋†“๊ณ  return ๊ฐ’์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฑ‰์–ด์ฃผ๋ฉฐ ๊ทธ ์•ˆ์— ๊ฐ’์ด ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ฐ’์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•˜๋Š” ๊ณณ์— ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ค€๋‹ค.

{renderByCurrentQuestion(currentQ)}

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ํ•จ์ˆ˜์— ๋‚ด๊ฐ€ ์„ค์ •ํ•ด๋†“์€ currentQ ๋ผ๋Š” ์ˆซ์ž๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ return ๋˜๊ฒŒ ๋œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ๋‚ด๊ฒŒ ํฌ๋‚˜ํฐ ์ถฉ๊ฒฉ?์„ ์คฌ๋‹ค. ์‹ ์„ ํ–ˆ๋‹ค. ์—ญ์‹œ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ๋ฌด๊ถ๋ฌด์ง„ํ•˜๊ณ  ๋‚˜๋Š” ๋„ˆ๋ฌด ๋ถ€์กฑํ•จ์„ ๋งŽ์ด ๋Š๋‚€๋‹ค.
๋งŽ์ด ๋ฐฐ์šด ํ•˜๋ฃจ๋‹ค ! ๊ฐ์‚ฌํ•˜๋‹ค !

profile
๋‹จ์ˆœํžˆ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ œ๊ฒŒ ์žˆ์—ˆ๋˜ ์ผ์„ ์ ๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค โœ๐Ÿป

0๊ฐœ์˜ ๋Œ“๊ธ€