이번에 이벤트 리스너의 콜백함수에로 값을 전달해야 될때 HOF으로도 가능하다는 것을 알았다
// 기존 사용 방식 : 이벤트 콜백함수에 인자가 필요하면 익명함수 형태로 전달
const onClickButton = (textList: string[], index:number, boxType: 'whatYouCanLearn' | 'expectedStudents' | 'requiredKnowledge') => {
const textArray = [...textList];
textArray.splice(index, 1);
switch (boxType) {
case 'whatYouCanLearn':
dispatch({
type: DELETE_ITEM_WHATYOUCANLEARN,
data: textArray,
});
break;
case 'expectedStudents':
dispatch({
type: DELETE_ITEM_EXPECTEDSTUDENTS,
data: textArray,
});
break;
case 'requiredKnowledge':
dispatch({
type: DELETE_ITEM_REQUIREDKNOWLEDGE,
data: textArray,
});
break;
default:
console.error('boxType is wrong');
}
}
<TextListBox key={index} onClick={() => onClickButton(data?.textlist, index)} />
// 새롭게 적용하는 방식 : 함수를 리턴하는 함수를 만들어서 전달
const onClickButton = (textList: string[], index:number, boxType: 'whatYouCanLearn' | 'expectedStudents' | 'requiredKnowledge') = () => {
const textArray = [...textList];
textArray.splice(index, 1);
switch (boxType) {
case 'whatYouCanLearn':
dispatch({
type: DELETE_ITEM_WHATYOUCANLEARN,
data: textArray,
});
break;
case 'expectedStudents':
dispatch({
type: DELETE_ITEM_EXPECTEDSTUDENTS,
data: textArray,
});
break;
case 'requiredKnowledge':
dispatch({
type: DELETE_ITEM_REQUIREDKNOWLEDGE,
data: textArray,
});
break;
default:
console.error('boxType is wrong');
}
}
<TextListBox key={index} onClick={onClickButton(data?.textlist, index)}
그 전엔 anonymous 함수를 그 자리에서 만들어서 값을 전달했었는데 더 섹시한 방법이 있는 걸 알게 되니 앞으로 이렇게 사용해야겠다는 생각이 든다
그 전에 HOF가 무엇인지 명확히 알고갈 필요가 있다
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
함수를 리턴하는 것은 맞지만 함수를 인자로 받지 않기 때문에 HOF이라기 보단 함수를 리턴하는 함수라고 표현하는게 맞는 걸까
그래도 1-1.보다 1-2. 코드가 메모리를 더 적게 사용할 것 같다.