Skip to content

๐Ÿ“š ๋‚ด๊ฐ€ ๋…์„œ๋ชจ์ž„์— ๊ฐ€์ž…ํ•œ๋‹ค๋ฉด? ๋…์„œ๋ชจ์ž„ ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ

Notifications You must be signed in to change notification settings

fe-Jay/mbti-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

34 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“š ๋‚ด๊ฐ€ ๋…์„œ๋ชจ์ž„์— ๊ฐ€์ž…ํ•œ๋‹ค๋ฉด? ๋…์„œ๋ชจ์ž„ ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ

ํ…Œ์ŠคํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ



๊ธฐ์ˆ  ์Šคํƒ

React Vite TypeScript React Router Netlify TailwindCSS



์ฃผ์š” ๊ธฐ์ˆ 

step์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ๋ณ€๋™์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์„ ๋ณ€๊ฒฝ

{
  /* ์‹œ์ž‘ */
}
{
  step === 0 && <Intro nextStep={nextStep} />;
}

{
  /* ํ…Œ์ŠคํŠธ ์ง„ํ–‰ */
}
{
  step > 0 && step < 13 && <Question step={step} nextStep={nextStep} answers={answers} setAnswers={setAnswers}></Question>;
}

{
  /* ํ…Œ์ŠคํŠธ ์™„๋ฃŒ */
}
{
  step === 13 && <Result answers={answers} reStart={reStart} />;
}


ํ…Œ์ŠคํŠธ ๋ฌธํ•ญ ๋…ธ์ถœ ๋ฐ ์„ ํƒํ•ญ๋ชฉ ๋ˆ„์ ์‚ฐ์ถœ

// ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ
useEffect(() => {
  fetch('../api/questions.json')
    .then((res) => res.json())
    .then((data: QuestionData[]) => {
      setData(data);
    })
    .catch((error) => console.error('Error loading questions:', error));
}, []);

if (data.length === 0) {
  return <div>๋กœ๋”ฉ์ค‘...</div>;
}

const { title, type, A, B } = data[step - 1] || {};

// ์œ ์ € ๋ฌธํ•ญ ์„ ํƒ์‹œ ๋ˆ„์ ์‚ฐ
const handleAnswer = (answer: 'A' | 'B') => {
  const newAnswers = { ...answers };
  // console.log(answer + newAnswers);

  newAnswers[type] = answers[type] + (answer === 'A' ? 1 : 0);

  setAnswers(newAnswers);
  nextStep();
};

ํ…Œ์ŠคํŠธ ์ง„ํ–‰ ํ™”๋ฉด



๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ์‚ฐ์ • ๋ฐ ํ‘œ์‹œ

const { EI, SN, TF, JP } = answers;
const mbti = `${EI < 2 ? 'I' : 'E'}${SN < 2 ? 'N' : 'S'}${TF < 2 ? 'F' : 'T'}${JP < 2 ? 'P' : 'J'}`;
const result: ResultItem | undefined = data[mbti];
const { writer, img } = result;

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ํ™”๋ฉด



๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ์ €์žฅ

// aํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ download ์†์„ฑ์— url์„ ๋งคํ•‘ํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ ์‹คํ–‰
const handleSaveResult = () => {
  const link = document.createElement('a');
  link.href = `/assets/download/result_${img}`;
  link.download = `result_${img}`;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ์ €์žฅ ํ™”๋ฉด



๊ฒฐ๊ณผ ๊ณต์œ 

// ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ ๋ฐ Toast ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
const handleShareResult = () => {
  navigator.clipboard
    .writeText(baseUrl)
    .then(() => {
      setShowToast(true);
      setTimeout(() => {
        setShowToast(false);
      }, 3000);
    })
    .catch((err) => console.error('Failed to copy: ', err));
};

ํ…Œ์ŠคํŠธ url ๊ณต์œ  ํ™”๋ฉด

About

๐Ÿ“š ๋‚ด๊ฐ€ ๋…์„œ๋ชจ์ž„์— ๊ฐ€์ž…ํ•œ๋‹ค๋ฉด? ๋…์„œ๋ชจ์ž„ ์„ฑ๊ฒฉ ํ…Œ์ŠคํŠธ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published