고차 컴포넌트(HOC)는 코드 재사용, 논리 추상화 및 구성 가능성을 위한 React의 패턴입니다.
이는 구성 요소를 가져와 추가 기능이 포함된 새로운 향상된 구성 요소를 반환하는 함수입니다.
기본 컴포넌트 Button
//Button.jsx
import React from 'react';
const Button = ({ onClick, children }) => {
return (
<button onClick={onClick}>
{children}
</button>
);
};
export default Button;
고차 컴포넌트 withLogger
//withLogger.jsx
import React from 'react';
const withLogger = (WrappedComponent) => {
return class WithLogger extends React.Component {
handleClick = () => {
console.log('Button clicked');
};
render() {
return (
<WrappedComponent onClick={this.handleClick} {...this.props} />
);
}
};
};
export default withLogger;
향상된 컴포넌트
import React from 'react';
import Button from './Button';
import withLogger from './withLogger';
const EnhancedButton = withLogger(Button);
const App = () => {
return (
<div>
<h1>Higher-Order Component Example</h1>
<EnhancedButton>Click me</EnhancedButton>
</div>
);
};
export default App;
props를 하위 구성 요소에 전달하거나 함수를 호출하거나 새 객체를 생성할 때 객체의 속성을 확산시키는 데 사용됩니다.
import React from 'react';
import ChildComponent from './ChildComponent';
const ParentComponent = (props) => {
// Pass all props to ChildComponent using the spread operator
return <ChildComponent {...props} />;
};
export default ParentComponent;
함수에서 인자로 사용할 속성을 미리 알 수 없기 때문이다!
// Example of a Presentation Component
const Button = ({ onClick, children }) => {
return <button onClick={onClick}>{children}</button>;
};
// Example of a Container Component
import React, { useState } from 'react';
const CounterContainer = () => {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
return <Counter count={count} onIncrement={increment} />;
};
프레젠테이션 구성 요소는 UI 렌더링에 계속 중점을 두는 반면, 컨테이너 구성 요소는 상태 관리 및 비즈니스 논리를 처리하여 문제의 분리와 재사용성을 향상시킵니다.