고차컴포넌트란 ?
컴포넌트 로직을 재사용하기 위한 React의 고급 기술이다.
고차 컴포넌트(HOC)는 React API의 일부가 아니며, React의 구성적 특성에서 나오는 패턴.
구체적으로, 고차 컴포넌트는 컴포넌트를 가져와 새 컴포넌트를 반환하는 함수
const EnhancedComponent = higherOrderComponent(WrappedComponent);
컴포넌트는 props를 UI로 변환하는 반면에, 고차 컴포넌트는 컴포넌트를 새로운 컴포넌트로 변환한다.
예제
[App.js]
import "./App.css";
import Button from "./components/3.7 HOC/Button";
import Input from "./components/3.7 HOC/Input";
function App() {
return (
<div className="App">
<Input />
<Button />
</div>
);
}
export default App;
[Input.js]
import React from "react";
import withLoading from "./withLoading";
function Input() {
return <input defaultValue="Input" type="text" />;
}
export default withLoading(Input);
[Button.js]
import React from "react";
import withLoading from "./withLoading";
function Button() {
return <button>Button</button>;
}
export default withLoading(Button);
button컴포넌트와 input컴포넌트는 일반적으로 button과 input을 리턴하는 구조이다.
여기서는 아직 input이나 button이 호출되지는 않는다.
마지막 라인에 withLoading함수를 호출하면서자기 자신의 컴포넌트를 인자로 넣어준 것을 볼 수 있다.
[withLoading.js]
import React, { useEffect, useState } from "react";
export default function withLoading(Component) {
const WithLoadingComponent = (props) => {
const [loading, setLoading] = useState(true);
useEffect(() => {
const Timer = setTimeout(() => {
setLoading(false);
}, 2000);
return () => clearTimeout(Timer);
});
return loading ? <p>...Loading</p> : <Component {...props} />;
};
return WithLoadingComponent;
}
withLoading 함수는 component(Input,Button)를 인자로 받으면서 인자로 받은 컴포넌트를 return해준다.
return loading ? <p>...Loading</p> : <Component {...props} />;
Input컴포넌트와 Button컴포넌트는 여기서 호출이되어 실행되는 것으로 이해하면 될 듯하다.
리액트를 사용하면서 재사용되는 훅이 많아 커스텀 훅을 사용하듯이 고차컴포넌트 또한 재사용되는 컴포넌트 로직이 많아 사용한다고 이해하고 있다.
결과
'React 내용 정리' 카테고리의 다른 글
Context (0) | 2022.11.04 |
---|---|
Memoization (0) | 2022.11.03 |
List and Key (0) | 2022.10.28 |
조건부 렌더링 (0) | 2022.10.28 |
SUPER(PROPS)에 대해서 (0) | 2022.10.23 |