inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React 완벽 마스터: 기초 개념부터 린캔버스 프로젝트까지

이벤트 전파

함수 정의 위치

해결된 질문

110

Junseob Youn

작성한 질문수 1

1

안녕하세요!

 

React로 프로젝트를 진행할 때 여러 함수들(이벤트 핸들러나 로직 처리 함수 등)을 구현하게 되는데,
이런 함수들을 어느 위치에서 정의하고 관리하는 것이 좋은지 궁금합니다.

예를 들어, B 컴포넌트 안에 A 컴포넌트가 있고, A에서 어떤 이벤트 함수가 필요하다면
그 함수를 B에서 정의하고 props로 A에 전달하는 식으로 처리하는 것이 React에서 일반적인 방식인가요?

그리고 만약 그 함수가 여러 컴포넌트에서 재사용되어야 한다면,
이들 컴포넌트의 공통 상위 컴포넌트까지 올라가서 정의한 후 각 컴포넌트에 전달하는 방식이 맞는지도 궁금합니다.

 

혹시 더 좋은 구조나 패턴이 있다면 조언 주시면 감사하겠습니다!

react React-Context react-router tailwindcss react-query

답변 1

2

짐코딩

안녕하세요 🙂

React에서 함수 정의 위치에 관한 질문에 답변드리겠습니다.

React에서 함수를 정의하고 관리하는 위치는 프로젝트의 구조와 목적에 따라 달라질 수 있습니다. 일반적으로 다음과 같은 접근 방식이 사용됩니다:

  1. 컴포넌트 로컬 함수: 해당 컴포넌트에서만 사용되는 함수라면, 컴포넌트 내부에 직접 정의하는 것이 가장 좋습니다.

  2. 상위 컴포넌트에서 정의 및 Props로 전달: 질문하신 것처럼, B 컴포넌트 안에 A 컴포넌트가 있고 A에서 이벤트 핸들러가 필요하다면, 특히 그 함수가 B의 상태를 변경해야 한다면 B에서 정의하고 props로 전달하는 것이 적절합니다.

  3. 공통 상위 컴포넌트: 여러 컴포넌트에서 동일한 함수를 사용해야 한다면, 공통 부모 컴포넌트에서 정의한 후 필요한 자식 컴포넌트들에 props로 전달하는 것이 React의 단방향 데이터 흐름 원칙에 맞습니다.

하지만 프로젝트가 커지면서 props drilling 문제가 발생할 수 있습니다. 이를 해결할 수 있는 더 확장 가능한 패턴들이 있습니다:

  1. Context API: 여러 컴포넌트에서 공유해야 하는 함수가 있다면, Context를 사용하여 함수를 제공할 수 있습니다.

    const FunctionContext = React.createContext();
    
    function FunctionProvider({ children }) {
      const sharedFunction = () => {
        // 로직
      };
      
      return (
        <FunctionContext.Provider value={{ sharedFunction }}>
          {children}
        </FunctionContext.Provider>
      );
    }
    
  2. Custom Hooks: 재사용 가능한 로직을 custom hook으로 분리하여 여러 컴포넌트에서 사용할 수 있습니다.

    function useSharedFunctionality() {
      const handleEvent = () => {
        // 로직
      };
      
      return { handleEvent };
    }
    
  3. 유틸리티 함수: 순수 함수(상태나 라이프사이클에 의존하지 않는 함수)의 경우, 별도의 유틸리티 파일에 정의하고 필요한 컴포넌트에서 import하여 사용할 수 있습니다.

    // utils/functions.js
    export function formatData(data) {
      // 로직
    }
    
    // Component.jsx
    import { formatData } from '../utils/functions';
    

대규모 프로젝트나 복잡한 애플리케이션에서는 상태 관리 라이브러리(Redux, MobX, Zustand, Jotai 등)를 사용하여 함수와 상태를 함께 관리하는 방법도 고려할 수 있습니다.

결론적으로, 함수의 용도와 범위에 따라 적절한 위치를 선택하는 것이 중요합니다:

  • 단일 컴포넌트용 → 컴포넌트 내부

  • 부모-자식 관계의 함수 → 부모에서 정의하고 props로 전달

  • 여러 컴포넌트에서 공유되는 함수 → Context API, Custom Hooks, 또는 유틸리티 파일

0

Junseob Youn

친절한 설명 감사합니다~!!

오타?

0

30

1

뭐하나 여쭤봐도 될까요?

0

70

1

안녕하세요 질문이 있습니다.

0

56

2

질문 : 삭제 버튼 아규먼트 (id)

0

50

1

Tailwind 버전 확인

0

63

1

align-items 정렬

0

50

2

vite 명령어로 프로젝트를 만들었습니다. (vscode)

0

79

1

31. 객체 업데이트 하기 - 10:15 질문

1

56

2

강의교안, 내용 인용해서 블로그 글 작성

1

80

2

이미지가 출력되지 않아요

1

76

2

강의와 만들어진 코드가 달라요

0

76

3

AI와 CSS 라이브러리의 궁합

0

97

1

onClick 이벤트에 함수 넘길 때

0

68

1

린캔버스 기능 구현은 왜 못하나요.... 구현하고 싶습니다...

0

101

1

notes 없음 읽기 오류

0

72

1

Object.assign 문법

0

64

1

react-router 전혀 기능 안함

0

54

1

react-router-dom@6.25.1

0

47

1

React Router 최신 스펙

0

209

1

Immer 에서 filter, map 사용

0

55

1

vite 설치에 대해 질문있습니다.

0

76

2

라이브러리 버전 일치 이슈

0

77

1

"Enter 키 발생 시 항목 추가" 부분에서 공백이 포함되면 한 줄이 더 입력됩니다

0

51

2

TotalCounter을 작성할때

0

66

2