hof,hoc

김하은·2023년 3월 6일
0

HOC ==>

실행할컴포넌트보다 먼저 실행되는 컴포넌트.
이 컴포넌트에 useEffect라는 로직을 집어넣어 실행을 원하는 컴포넌트의 실행전 HOC컴포넌트의 useEffect가 먼저 실행되어 권한체크.

HOF ===>

함수 안에서 실행되는 함수

event.target.id 부분을 HOF방식으로 바꿔보자.
페이지 네이션실습폴더에서 실습진행

onClick={onClickPage(index+1)} 이렇게 바인딩하여보자

기존 onclick함수에 소괄호와 화살표를 하나 추가해준다
즉 함수 실행시 모양은 onClickPage(index+1)(event) 이런 모양이 된다.
콜백함수 모양!!

const onClickPage =
    (boardId: number) => async (event: MouseEvent<HTMLSpanElement>) => {
      await refetch({ page: boardId });
    };
onClick={onClickPage(index + startPage)}

아래쪽 onClick에 들어가는 소괄호 부분이 인자로, 위의 boardId라는 매개변수에 들어가 그것을 사용해준다.

event.target.id를 사용하는대신 HOF를 사용하면 혹시나 id가 중복될경우에 발생할 에러를 줄일 수 있다.

그렇다면 HOC는 어떻게 만드는가?

HOF에서 리턴으로 컴포넌트가 들어간다면 HOC라고 할 수 있다.

export default function Aaa(){
	return <Bbb aaa={"철수"}/>
    }

==>

export default function Aaa(){
	return <>{Bbb({qqq:"철수"})}</> ==> 함수로 바꾸는 방법
    }

여기에 검증부분넣고

아래는 실행부분

export default function Bbb (props) {
	return<div>이름은{props.qqq}입니다</div>
  }  

즉 검증부분에 먼저 실행할 컴포넌트인 HOC를 넣어주면 된다.

export default function Aaa(){
	return <>{HOC(Bbb)({qqq:"철수"})}</> ==> 여기가 최종적으로 실행되고,Bbb가
    }
Bbb가 여기 Component부분에 들어가고 props로 넘겨주는 qqq가 props로 들어간다. 
const HOC = (Component) => (props) =>{
		여기에 검증 즉 기존에 검증으로 넣어주었던 useEffect를 넣어준다.
        return <Component {...props}/> ==> props에 뭐가 들어올 지 모르니 스프레드 시켜 Bbb에 모두 넣는다고 표현
   }     
HOC에게서 props를 받음
export default function Bbb (props) {
	return<div>이름은{props.qqq}입니다</div>
  }  

{HOC(Bbb)({qqq:"철수"})} 이렇게 여기서 합치는 방법이 있고, 보내기전에 미리 합치는 방식이 있다.

 function Bbb (props) {
	return<div>이름은{props.qqq}입니다</div>
  }  
  export default HOC(Bbb)

{HOC(Bbb)({qqq:"철수"})} 이 부분과
export default HOC(Bbb) 이 부분은 동일하다

두번째 방식을 주로 사용하고, 내보내야할 컴포넌트 앞에 HOC을 붙여 import하여 사용한다.

보통 HOC의 이름은 with를 붙여주는 게 관례.

인증의 경우: withAuth(해당페이지 함수명)
그러면 소괄호안의 함수가 실행되기전에 HOF 여기서는 withAuth라는 이름의 HOF가 실행되어 검증을 거치게된다.

0개의 댓글