[Project Detto] 기술 μŠ€νƒ 쀑볡 μ²˜λ¦¬μ— λŒ€ν•œ κ³ μ°°
728x90

Today, What I learned?

λ§ˆμ΄νŽ˜μ΄μ§€ κ΅¬ν˜„ 쀑!..
λ§ˆμ΄νŽ˜μ΄μ§€ 접속 μ‹œ κ°€μ Έμ˜€λŠ” μœ μ € 정보λ₯Ό λ Œλ”λ§ ν•΄μ£ΌλŠ” κ³Όμ •μ—μ„œ 기술 μŠ€νƒ 데이터λ₯Ό ν•Έλ“€λ§ν•˜λ˜ 쀑에 λ§‰νžˆκ³  λ§μ•˜λ‹€.
개발 κΈ°μˆ μŠ€νƒμ€ 잘 λ‚˜μ˜€κ³  μžˆμ§€λ§Œ ν¬μ§€μ…˜κ³Ό 상관 없이 기획, λ””μžμΈ 뢀뢄이 μ€‘λ³΅λ˜μ–΄ λ‚˜νƒ€λ‚¬κΈ° λ•Œλ¬Έ..😨😨😨 (NOOOOOooo...)

μœ„ μ‚¬μ§„μ—μ„œλŠ” μž˜λ Έμ§€λ§Œ λ””μžμΈ, ν”„λ‘ νŠΈμ—”λ“œκ°€ μ„ νƒλ˜μ–΄ μžˆλŠ” μƒνƒœμ˜€λ‹€.
μ›ν•˜λŠ” λŒ€λ‘œ 되렀면 μœ μ €μ˜ μ„ νƒλœ ν¬μ§€μ…˜μ— λ”°λΌμ„œ ꡬ뢄될 ν•„μš”κ°€ 있고,
μœ μ €κ°€ κΈ°νšμ΄λ‚˜ λ””μžμΈ λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν–ˆλ‹€λ©΄ ν•΄λ‹Ή ν¬μ§€μ…˜μ˜ μŠ€νƒμ΄ ν™œμ„±ν™”λ˜λ„λ‘ ν•΄μ•Ό ν•œλ‹€!..

κΈ°μ‘΄ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μ•˜λ‹€.

<SkillsWRapper\>
    {skills.map((skill: string) \=> {
        const isChecked \= checkedSkills?.includes(skill); 
          return (<SkillButton key={skill} name={skill} isChecked={isChecked ? true : false}/>);
})}


μ–΄λ–»κ²Œ ν•  것인가!

μ’€ 더 쒋은 방법이 λΆ„λͺ… μžˆμ„ 것이라 μƒκ°ν•˜μ§€λ§Œ?..
일단 μœ μ €μ˜ ν¬μ§€μ…˜ λ Œλ”λ§μ— μ‚¬μš©λ˜κ³  μžˆλŠ” positions λΌλŠ” 배열을 μž¬μ‚¬μš©ν•΄μ„œ type 값을 얻어와 κ΅¬ν˜„ν•΄λ³΄κΈ°λ‘œ ν–ˆλ‹€.

export const positions = [
  { type: 'planner', name: '기획' },
  { type: 'designer', name: 'λ””μžμΈ' },
  { type: 'frontend', name: 'ν”„λ‘ νŠΈμ—”λ“œ' },
  { type: 'backend', name: 'λ°±μ—”λ“œ' },
];


κ΅¬ν˜„ 해보기

이λ₯Ό μœ„ν•΄μ„œ μœ μ €κ°€ μ„ νƒν•œ ν¬μ§€μ…˜λ„ 일단 props둜 λ„˜κ²¨μ£Όμ—ˆλ‹€.
이 SkillList μ»΄ν¬λ„ŒνŠΈμ˜ category κ°’κ³Ό μœ μ €κ°€ μ„ νƒν•œ ν¬μ§€μ…˜μ΄ μΌμΉ˜ν•˜λŠ”μ§€μ˜ μ—¬λΆ€λ₯Ό λ”°μ Έλ³΄κΈ°λ‘œ ν–ˆλ‹€.

<SkillList
        category="기획"
        skills={products}
        checkedPositions={user?.positions}  // <<<< κΈ°μ‘΄ μ½”λ“œμ—μ„œ μΆ”κ°€ 됨
        checkedSkills={user?.skills}
/>
...


κΈ΄ μ‹œκ°„ 머리λ₯Ό 싸맀본 κ²°κ³Ό … 일단 μ™„μ„±λœ μ•„λž˜ μ½”λ“œλ₯Ό μš”μ•½ν•˜λ©΄ 이렇닀.

  1. μœ μ €κ°€ μ„ νƒν•œ ν¬μ§€μ…˜κ³Όμ˜ μΌμΉ˜μ—¬λΆ€μ— 따라 ν™œμ„±λ˜λŠ” ν”Œλž˜κ·Έλ₯Ό μ €μž₯ν•˜λŠ” stateλ₯Ό μƒμ„±ν•œ.
    1. μœ μ € ν¬μ§€μ…˜μœΌλ‘œ κΈ°νšμ„ μ„ νƒν–ˆμ„ 경우 β†’ 기획 κΈ°μˆ μŠ€νƒ ν™œμ„±ν™”
    2. μœ μ € ν¬μ§€μ…˜μœΌλ‘œ λ””μžμΈμ„ μ„ νƒν–ˆμ„ 경우 β†’ λ””μžμΈ 기술 μŠ€νƒ ν™œμ„±ν™”
  2. μΉ΄ν…Œκ³ λ¦¬κ°€ κΈ°νšμ΄λ‚˜ λ””μžμΈμΌ 경우 μœ„μ˜ positions μ—μ„œ μΌμΉ˜ν•˜λŠ” 객체λ₯Ό μ°ΎλŠ”λ‹€.
  3. μœ μ €κ°€ μ„ νƒν•œ ν¬μ§€μ…˜μ΄ ν˜„μž¬ μΉ΄ν…Œκ³ λ¦¬ 객체와 μΌμΉ˜ν•˜λŠ” 경우 ν”Œλž˜κ·Έλ₯Ό true 둜 λ³€κ²½ν•œλ‹€.
// μœ μ €κ°€ μ„ νƒν•œ ν¬μ§€μ…˜κ³Όμ˜ μΌμΉ˜μ—¬λΆ€μ— 따라 ν™œμ„±λ˜λŠ” flag
  const [positionFlag, setPositionFlag] = useState(true);

  useEffect(() => {
    if (category !== '개발') {
      // positionsλ‘œλΆ€ν„° ν˜„μž¬ μΉ΄ν…Œκ³ λ¦¬μ™€ μΌμΉ˜ν•˜λŠ” type값을 κ°€μ Έμ˜€κΈ° μœ„ν•œ 객체 탐색 
      const currentCategoryObj = positions.find(
        (position) => position.name === category,
      );
      const currentCategory = currentCategoryObj?.type; // ex. planner or designer

      // μœ μ €κ°€ μ„ νƒν•œ ν¬μ§€μ…˜μΈ checkedPositions에 ν˜„μž¬ μΉ΄ν…Œκ³ λ¦¬μ™€ μΌμΉ˜ν•˜λŠ” 값이 μžˆλŠ”μ§€ 확인
      const isMatched = checkedPositions?.findIndex(
        (position) => position === currentCategory,
      );

      isMatched === -1 || isMatched === undefined
        ? setPositionFlag(false)
        : setPositionFlag(true);
    }
  }, [category, checkedPositions]);
...

ν”Œλž˜κ·Έκ°€ true 라면 κΈ°μˆ μŠ€νƒμ΄ λ‚˜μ—΄λ˜μ–΄ μžˆλŠ” skills λ°°μ—΄μ—μ„œ μΌμΉ˜ν•˜λŠ” 값을 μ°Ύμ•„ μ„ νƒλ˜λ„λ‘ ν™œμ„±ν™”μ‹œν‚¨λ‹€.

{skills.map((skill: string) => {
          const isChecked = positionFlag // <<<< 
            ? checkedSkills?.includes(skill)
            : false;

          return (
            <SkillButton
              key={skill}
              name={skill}
              isChecked={isChecked ? true : false}
            />
          );
})}


그럼 μ•„λž˜μ™€ 같이 각각 기획이면 기획 기술 μŠ€νƒμ΄, λ””μžμΈμ΄λ©΄ λ””μžμΈ 기술 μŠ€νƒμ΄ ν™œμ„±ν™”λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

ν•˜μ§€λ§Œ?…

기획과 λ””μžμΈ, λ‘˜ λ‹€ μ„ νƒν•œ κ²½μš°μ—λŠ”?????

μ•„λž˜μ™€ 같이 기획과 λ””μžμΈμ΄ λ™μ‹œμ— μ„ νƒλ˜μ—ˆμ„ λ•ŒλŠ” λ™μΌν•˜κ²Œ 값을 μ²˜λ¦¬ν•΄μ•Ό 할지??..
λ™μΌν•˜κ²Œ μ²˜λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ»¬λ ‰μ…˜μ˜ ꡬ쑰λ₯Ό ν”„λ‘œμ νŠΈ κΈ€ μž‘μ„±κ³Ό 같이 각각 ν¬μ§€μ…˜λ³„λ‘œ 기획, λ””μžμΈ, 개발 μ΄λ ‡κ²Œ λ‚˜λˆ μ•Ό 할지!...
무척 κ³ λ―Όλœλ‹€... πŸ€” 이 뢀뢄은 νŒ€μ›λ“€κ³Ό λ”°λ‘œ μƒμ˜ν•΄ 보기둜..




+++++
νŒ€μ›λ“€κ³Ό μƒμ˜ 끝에 ν”„λ‘œμ νŠΈ κ²Œμ‹œκΈ€ μž‘μ„±κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ μœ μ € DB도 ν¬μ§€μ…˜ λ³„λ‘œ 기술 μŠ€νƒμ„ λ‚˜λˆ„λŠ” λ°©ν–₯으둜 κ²°μ •ν–ˆλ‹€.

μ €λ ‡κ²Œ λ³€κ²½ν–ˆλ”λ‹ˆ μœ„μ˜ 둜직이 λͺ¨λ‘ ν•„μš” μ—†μ–΄μ‘Œλ‹€!.. (흑흑)
ν•˜μ§€λ§Œ 각 ν¬μ§€μ…˜ λ³„λ‘œ μŠ€νƒμ„ λ°›μ•„μ˜€κΈ° λ•Œλ¬Έμ— μ½”λ“œκ°€ μ•„μ£Ό κΉ”λ”ν•΄μ‘Œλ‹€..

const SkillList = ({ category, skills, checkedSkills }: SkillListProps) => {
  return (
    <>
      <SkillTitle>{category}</SkillTitle>
      <SkillsWRapper>
        {skills.map((skill: string) => {
          const isChecked = checkedSkills?.includes(skill);
          return (
            <SkillButton
              key={skill}
              name={skill}
              isChecked={isChecked ? true : false}
            />
          );
        })}
      </SkillsWRapper>
    </>
  );
};


쒋은 고찰의 μ‹œκ°„μ΄μ—ˆλ‹€.. πŸ˜‚

728x90