0Pricing
React Academy · 강의

렌더 속성 패턴

JSX를 반환하는 함수를 속성으로 전달해 UI를 결합하지 않고 동작을 공유합니다.

렌더 속성 패턴은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

이 강의에서는 함수를 속성으로 전달하고 그 함수가 JSX를 반환하도록 하는 렌더 속성 패턴을 이해하고, 컴포넌트 간 동작을 공유할 때 이 패턴이 언제 유용한지 알아봅니다.

렌더 속성이란 무엇인가요?

렌더 속성은 컴포넌트가 함수인 속성을 받는 패턴입니다. 컴포넌트는 렌더링 결과를 만들기 위해 이 함수를 호출합니다. 사용 측이 UI를 제어하고, 컴포넌트가 동작을 제공합니다.
<DataProvider render={data => <UserCard user={data} />} />

간단한 렌더 속성 예제

Toggle 컴포넌트는 열림/닫힘 상태를 관리하고, 현재 상태와 토글 함수를 렌더 속성에 전달해 호출합니다. 렌더링 방법은 사용 측이 결정합니다.
function Toggle({ render }) {
  const [on, setOn] = useState(false);
  return render(on, () => setOn(!on));
}

<Toggle render={(on, toggle) => (
  <button onClick={toggle}>{on ? 'Close' : 'Open'}</button>
)} />

렌더 속성으로 children 사용하기

이름이 지정된 렌더 속성 대신 `children`을 함수로 사용할 수 있습니다. 여러 라이브러리(React Router v5, Formik)가 이 패턴을 사용하며, 이를 ‘함수로서의 children’이라고 부르기도 합니다.
<Toggle>
  {(on, toggle) => (
    <div>
      {on && <Panel />}
      <button onClick={toggle}>Toggle</button>
    </div>
  )}
</Toggle>

마우스 위치 추적기

전형적인 렌더 속성 예제입니다. MouseTracker 컴포넌트가 커서 위치를 추적하고 이를 렌더 속성에 전달합니다. 어떤 사용 측이든 원하는 방식으로 위치를 표시할 수 있습니다.
function MouseTracker({ children }) {
  const [pos, setPos] = useState({ x: 0, y: 0 });
  return (
    <div onMouseMove={e => setPos({ x: e.clientX, y: e.clientY })}>
      {children(pos)}
    </div>
  );
}

렌더 속성과 사용자 지정 훅 비교

훅이 등장하기 전에는 렌더 속성이 가장 널리 사용되는 패턴이었습니다. 이제 사용자 지정 훅이 같은 작업을 더 깔끔하게 처리합니다. 훅은 데이터와 함수를 반환하고, 컴포넌트는 이를 자체 JSX에서 사용합니다. 최신 React에서는 훅을 선호합니다.
// Old: render props
<Mouse render={pos => <p>{pos.x}</p>} />

// Modern: custom hook
const pos = useMouse();
<p>{pos.x}</p>

렌더 속성이 여전히 유용한 경우

다음과 같은 경우 렌더 속성이 여전히 유용합니다. (1) 컴포넌트 트리의 특정 위치에 동적인 렌더링을 주입해야 하는 경우, (2) 로직과 UI를 분리하는 헤드리스 컴포넌트 라이브러리를 만드는 경우입니다.

성능 경고

렌더 속성을 인라인으로 정의하면 부모가 렌더링될 때마다 새로운 함수가 생성되어 PureComponent/React.memo 자식 컴포넌트가 렌더링을 건너뛰지 못합니다. 렌더 속성 함수를 안정적인 변수나 메서드로 추출하세요.
// Avoid: new function every render
<Toggle render={pos => <Dot pos={pos} />} />

// Better: stable reference
const renderDot = pos => <Dot pos={pos} />;
<Toggle render={renderDot} />

렌더 속성 조합하기

여러 렌더 속성 컴포넌트를 중첩하면 읽기 어려운 깊은 중첩 콜백인 ‘렌더 속성 지옥’ 또는 ‘래퍼 지옥’이 빠르게 만들어집니다. 이것이 훅이 도입된 이유 중 하나입니다.

라이브러리에서의 렌더 속성

React Router v5는 Route에 렌더 속성을 사용했습니다. Downshift, Formik, React-Table도 변형된 형태를 사용합니다. 렌더 속성을 이해하면 이러한 라이브러리를 사용하는 코드를 읽고 디버깅하는 데 도움이 됩니다.

빠른 확인

정적인 JSX를 전달하는 것보다 렌더 속성 패턴이 갖는 주요 장점은 무엇인가요?

복습

렌더 속성은 JSX를 반환하는 함수를 전달합니다. 컴포넌트는 동작을 제공하고, 사용 측은 UI를 제공합니다. 최신 React에서는 사용자 지정 훅을 우선 사용하되, 기존 코드를 읽고 헤드리스 컴포넌트를 만들기 위해 렌더 속성을 이해해야 합니다.

다음 내용

다음 강의: **고차 컴포넌트(HOC) 설명** — 속성을 주입하고, 라우트를 보호하거나, 로그 기록을 추가하기 위해 컴포넌트를 래핑하는 방법을 알아봅니다.

자주 묻는 질문

“렌더 속성 패턴” 강의는 무료인가요?

네 — “렌더 속성 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“렌더 속성 패턴”에서 뭘 배우나요?

JSX를 반환하는 함수를 속성으로 전달해 UI를 결합하지 않고 동작을 공유합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“렌더 속성 패턴” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 렌더 속성 패턴
  2. 고차 컴포넌트(HOC) 이해하기
  3. HOC, 렌더 속성, 사용자 정의 훅 비교
  4. HOC를 사용자 정의 훅으로 리팩터링하기
← React Academy(으)로 돌아가기