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}
/>
...
κΈ΄ μκ° λ¨Έλ¦¬λ₯Ό μΈλ§€λ³Έ κ²°κ³Ό β¦ μΌλ¨ μμ±λ μλ μ½λλ₯Ό μμ½νλ©΄ μ΄λ λ€.
- μ μ κ° μ νν ν¬μ§μ
κ³Όμ μΌμΉμ¬λΆμ λ°λΌ νμ±λλ νλκ·Έλ₯Ό μ μ₯νλ stateλ₯Ό μμ±ν.
- μ μ ν¬μ§μ μΌλ‘ κΈ°νμ μ ννμ κ²½μ° β κΈ°ν κΈ°μ μ€ν νμ±ν
- μ μ ν¬μ§μ μΌλ‘ λμμΈμ μ ννμ κ²½μ° β λμμΈ κΈ°μ μ€ν νμ±ν
- μΉ΄ν
κ³ λ¦¬κ° κΈ°νμ΄λ λμμΈμΌ κ²½μ° μμ
positions
μμ μΌμΉνλ κ°μ²΄λ₯Ό μ°Ύλλ€. - μ μ κ° μ νν ν¬μ§μ
μ΄ νμ¬ μΉ΄ν
κ³ λ¦¬ κ°μ²΄μ μΌμΉνλ κ²½μ° νλκ·Έλ₯Ό
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>
</>
);
};
μ’μ κ³ μ°°μ μκ°μ΄μλ€.. π
'π Studying > π TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[React] 컀μ€ν λͺ¨λ¬ λ§λ€κΈ° (0) | 2023.02.15 |
---|---|
[React] input type = 'radio', 'checkbox'μ μνκ΄λ¦¬ (0) | 2023.02.14 |
[React] input radio, checkbox 컀μ€ν νκΈ° with Styled-components (3) | 2023.02.08 |
Yarn Berry μ€μ (0) | 2023.02.07 |
Emotion vs SCSS vs Styled-components (0) | 2023.02.06 |
Comment