강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

dsa02070님의 프로필 이미지
dsa02070

작성한 질문수

타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게

상태 끌어올리기

67강 상태업데이트 강의 중 궁금한 점

작성

·

35

0

 

import FirstCount from "./firstCount";
import SecondCount from "./secondCount";
import { useState } from "react";

export default function Main() {
  const [count, setCount] = useState(0);

  const handleSetCount = () => {
    setCount((prev: number) => prev + 1);
  };

  return (
    <>
      <h1>Main Component</h1>

      <FirstCount count={count} setCount={handleSetCount} />
      <SecondCount count={count} setCount={handleSetCount} />
    </>
  );
}

 

import type { MouseEventHandler } from "react";

interface FirstCountProps {
  count: number;
  setCount: MouseEventHandler<HTMLButtonElement>;
}

export default function FirstCount({ count, setCount }: FirstCountProps) {
  return (
    <>
      <h1>firstCount Component</h1>
      {count}
      <button onClick={setCount}>increase</button>
    </>
  );
}

 

import type React from "react";

interface SecondCountProps {
  count: number;
  setCount: React.MouseEventHandler<HTMLButtonElement>;
}

export default function SecondCount({ count, setCount }: SecondCountProps) {
  return (
    <>
      <h1>secondCount Component</h1>
      {count}
      <button onClick={setCount}>increase</button>
    </>
  );
}

 

맨 위에 코드가 부모컴포넌트인데 부모컴포넌트에서 증가 함수를 정의하고 그 아래에 props로 내려주는 패턴은 잘 쓰이지 않는 패턴인가요?

 

강의에서는 각 자식 컴포넌트에서 카운트 증가 로직이 있어서 중복되는거 같아요

 

그래서 부모에 하나로 정의하고 props로 내려주었는데 어느게 맞는 패턴인가요?

답변 3

1

Prop Drilling 을 배우셨나요? 부모 컴포넌트에서 자식 컴포넌트로 props를 통해 데이터를 전달하는 과정에서 데이터가 필요치 않은 중간 컴포넌트들도 해당 props를 전달 받는 패턴인데.. 좋은 패턴은 아니죠.. 그래서 가깝게는 Context API를 사용하는 방법을 배울 꺼구요.
좀 더 들어가면 커스텀 훅, 상태관리 라이브러리인 redux, zustand 사용할 겁니다.

0

수코딩님의 프로필 이미지
수코딩
지식공유자

안녕하세요.

우선 작성자님이 질문하신 코드의 패턴을 [Props Driling] 패턴이라고 합니다.

부모가 정의한 상태를 자식에게 내려주어서 공유하는 방식입니다.

대부분 이 방식을 평가할 때 흔히 '좋다, 나쁘다'로 이분법화해서 평가하려 합니다.

하지만 props driling 패턴은 리액트에서 가장 쉽고 흔하게 등장하는 패턴이며

상황에 따라서는 매우 좋은 방법입니다.

강의를 진행하시다보면, Props Driling을 대체할 수 있는 여러가지 방법을 더 배우실텐데

결국 다 배우시고 나서 본인 상황에서 본인이 가장 쓰기 편한 방법으로 골라서 사용하시면 됩니다.

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. dsa02070님.

부모 컴포넌트에서 상태 업데이트 함수를 정의하고, 이를 자식 컴포넌트로 props를 통해 내려주는 패턴은 많이 사용되는 패턴입니다. 이는 상태 관리와 로직의 일관성을 유지할 수 있게 해주며, 특히 상태가 여러 컴포넌트에 걸쳐 공유될 때 매우 유용합니다.

부모에서 상태 업데이트 함수를 내려주는 장점:

  1. 일관된 상태 관리: 상태 변경 로직을 부모에 집중시켜, 여러 자식 컴포넌트가 동일한 상태를 공유하고 일관된 방식으로 업데이트할 수 있습니다.

  2. 코드 중복 제거: 여러 자식 컴포넌트가 동일한 로직을 필요로 할 때, 부모 컴포넌트에서 한 번만 정의해 공유할 수 있어 코드 중복을 줄일 수 있습니다.

  3. 유지보수 용이성: 모든 상태 변경 로직이 한 곳에 모여 있어, 나중에 로직을 수정할 때 더 쉽게 관리할 수 있습니다.

반면, 자식 컴포넌트 각각에서 상태 변경 로직을 갖는 경우 특정 컴포넌트의 구체적 요구에 맞춰 커스터마이징할 수 있는 유연성을 제공합니다. 그러나 이는 코드 중복을 초래할 수 있으며, 상태가 여러 컴포넌트에 걸쳐 공유될 때는 적합하지 않을 수 있습니다.

질문하신 내용을 더 깊이 있게 이해할 수 있는 참고 링크를 제공합니다:
- 리액트에서 상태와 props를 효율적으로 사용하는 방법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dsa02070님의 프로필 이미지
dsa02070

작성한 질문수

질문하기