개발자

React에서 props를 무조건 줄이는게 옳을까요?

2023년 04월 29일조회 1,299

안녕하세요 React를 기반으로 프로젝트 진행중인 개발자입니다. 리팩토링 작업중 컴포넌트 사이에 예를들어 const {type} = router.query 와 같이 선언으로 가져올수있는부분이나 react-query의 useQuery를 이용해서 가져올수있는 데이터같은경우 각 컴포넌트마다 선언해서 사용하는게 옳은것인지, 부모측에서 선언해서 props로 내려주는게 옳은것인지 궁금한데 직장에 사수가 없어 질문할 곳이 없어 이곳에 질문 남깁니다... 답변부탁드립니다 !

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

인기 답변

Gorilla.Kim님의 프로필 사진

다른 개발자 분들의 의견이 궁금해지는 질문이네요 : ) 제가 이해한 바로는 "props로 자식 컴포넌트에게 react query 응답 데이터를 전달해야할까?" 의 질문으로 이해했습니다. 저의 경우에는 개발시에 데이터를 호출 및 가공처리를 담당하는 컴포넌트와 UI만을 담당하는 컴포넌트를 구분해서 개발하는편입니다. 그 이유는, 대부분의 버그나 이슈는 예측하기 어려운 곳에서 나타나는데요, 데이터를 Api를 이용해 호출해오거나 그 결과를 가공하는 과정이 대부분 해당이 된다고 생각해서에요. 그래서 react query를 쓰더라도 무조건적으로 데이터를 한곳에서 호출 후 자식에게 내려준다는 개념보다는 특정 기능을 하는 페이지를 개발할때 해당 페이지가 어떠한 비즈니스 기능들을 갖고 있는지 구분하고 각 비즈니스별로 Container 라는 컴포넌트를 만들어 해당 파일에서 필요한 데이터를 호출 및 관리하고 있습니다. 공통된 데이터 호출일지라도 react query가 캐싱된 데이터를 가져다가 사용해주기 때문에 중복호출 처리에 대해서는 react query를 믿고 그 역할을 위임하는 편입니다. 이후 각 비즈니스별로 필요한 UI들을 자식컴포넌트로 만들고 각 UI컴포넌트에서 필요로 하는 데이터를 Container에서 내려주고 UI 컴포넌트들은 데이터만 받아서 화면을 구성하도록 개발하고 있습니다. 질문에 대한 답변이 되셨을지 잘 모르겠네요 😅

인기 답변

강동희님의 프로필 사진

안녕하세요~ 이미 훌륭한 답변을 남겨주신 분이 계시지만 제 생각도 남겨놓겠습니다! 무조건 props 를 줄이는 것보다는 정말 필요한 props 는 넘기고 자식 컴포넌트 단에서 직접 활용할 수 있는 부분은 컴포넌트에서 활용하는 케이스가 좋은 케이스지 않을까 생각합니다. 정답이 정해진 것이 아닌 컴포넌트의 역할과 성격, props 로 넘겨주고 싶은 데이터가 어떤 데이터에 따라서 달라지지 않을까 생각이 듭니다. 예를 들어서 비즈니스 로직을 담아야하는 자식 컴포넌트 같은 경우엔 자식 컴포넌트더라도 필요하다면 직접 훅을 통해서 데이터를 결합할 수 있을것 같습니다. 만약 공통으로 사용중인 컴포넌트라면 추상화 레벨을 높여서 필요한 데이터를 props 로 받아서 컴포넌트를 만들어줄 것 같습니다. 다른 케이스로는 react-query 를 사용하는데 서버에서 list 데이터를 가져와 각 child 로 뿌리고 싶다면, 부모 컴포넌트에서 쿼리해와 list 를 map 을 돌리며 각 child 에게 필요한 데이터를 props 로 뿌려주는 케이스도 있을 것 같습니다. 이처럼 다양한 케이스에서 질문자님이 원하는 방법을 최적화 해서 작업하는게 옳은 방법이지 않을까 생각합니다!

커리어리 AI 봇님의 프로필 사진

안녕하세요! React에서 props를 전달하는 방식은 크게 두 가지입니다. 하나는 컴포넌트 내에서 직접 데이터를 가져오는 방식이고, 다른 하나는 부모 컴포넌트로부터 props로 전달받는 방식입니다. 이 두 가지 방식 중 어느 방식을 사용해야 하는지는 상황에 따라 다릅니다. 보통은 컴포넌트 간의 데이터 전달이 필요할 때 props를 이용하여 전달합니다. 하지만 데이터를 전달하기 위해서 매번 props를 이용하면 코드가 복잡해지고 관리하기 어려워질 수 있습니다. 따라서, 각 컴포넌트가 가져와야 할 데이터가 매우 간단하거나 해당 컴포넌트에서만 사용하는 경우에는 컴포넌트 내에서 데이터를 가져오는 방식이 적절할 수 있습니다. 하지만, 데이터가 복잡하거나 여러 컴포넌트에서 공유되는 경우에는 부모 컴포넌트에서 props를 이용하여 전달하는 것이 좋습니다. 따라서, 규모가 큰 프로젝트에서는 데이터를 전달하는 방식에 대해서 잘 고려해야 합니다. 필요한 경우, 상태 관리 라이브러리를 도입하는 것도 좋은 방법일 수 있습니다. 결론적으로, 컴포넌트 사이에서 데이터를 전달하는 방식에는 각각 장단점이 있으며 상황에 따라 다르므로, 적절한 방법을 선택하는 것이 중요합니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

비슷한 질문 1

Q. styled-component을 사용할 때 많은 props는 어떻게 해결하시나요?

안녕하세요, 개인 프로젝트를 진행 중에 궁금한 점이 있어 현직의 선배님들께 여쭤보고 싶어 질문을 남깁니다! 현재 React 프로젝트에서 styled-components를 CSS-in-JS로 사용하고 있습니다. 하지만 styled-components를 사용하면서 많아지는 props로 인해 JSX의 복잡도가 높아지는 것 같아 고민이 생겼습니다. 개인 프로젝트에서 사용하고 있는 FlexContainer라는 Flex 스타일(정렬방향, 간격)을 적용하는 컴포넌트입니다. const FlexContainer = styled.div<FlexContainerProps>` display: flex; flex-direction: ${({ col }) => (col ? 'column' : 'row')}; gap: ${({ gap }) => gap && `${gap}rem`}; `; <FlexContainer> 컴포넌트를 '내부 컨텐츠 정렬'을 위해 확장한 <FlexContainerAlign>입니다. const FlexContainerAlign = styled( FlexContainer )<FlexContainerAlignProps>` justify-content: ${({ justifyContent }) => justifyContent}; align-items: ${({ alignItems }) => alignItems}; `; <FlexContainerAlign>을 확장하여 추가적인 style을 적용할 수 있는 <FlexContainerStyle>입니다. const FlexContainerStyle = styled( FlexContainerAlign )<FlexContainerStyleProps>` background-color: ${({ background }) => background && theme.colors.grey}; ${({ styles }) => styles && { ...styles }}; `; FlexContainerStyle 컴포넌트를 사용했을 때 아래처럼 많은 props로 인해 복잡해집니다. <FlexContainerStyle justifyContent="space-between" alignItems="center" background gap={1} styles={{ padding: '1rem 1.5rem', borderRadius: '0.5rem', }}></FlexContainerStyle> 혹시 styled-components를 실무에서 사용하실 때 많은 props를 깔끔하게 정리할 수 있는 팁이 있을까요?

물론, 실제로 styled-component를 사용할 때 많은 소품을 깔끔하게 정리하기 위한 몇 가지 팁이 있습니다. 유틸리티 구성 요소를 사용하십시오. 유틸리티 구성요소는 공통 스타일 세트를 제공하는 구성요소입니다. 예를 들어 다음 스타일을 제공하는 플렉스 컨테이너용 유틸리티 구성 요소를 만들 수 있습니다. display: flex flex-direction: row gap: 1rem 테마를 사용하십시오. 테마는 구성 요소의 스타일을 지정하는 데 사용할 수 있는 미리 정의된 스타일 집합입니다. 예를 들어 다음 스타일을 포함하는 프로젝트의 테마를 만들 수 있습니다. primaryColor: blue secondaryColor: red textColor: black 디자인 시스템을 사용합니다. 디자인 시스템은 일관되고 사용자 친화적인 인터페이스를 구축하는 데 사용할 수 있는 재사용 가능한 구성 요소, 스타일 및 문서의 모음입니다. Material Design 및 Bootstrap과 같이 널리 사용되는 디자인 시스템이 많이 있습니다. 린터를 사용하십시오. Linter는 코드에서 오류를 찾아 수정하는 데 도움이 되는 도구입니다. 많은 linter에는 코드의 가독성과 유지 관리성을 개선하는 데 도움이 되는 규칙이 있습니다. 예를 들어 ESLint 린터에는 긴 코드 줄을 사용하지 않도록 도와주는 규칙이 있습니다. 일관된 명명 규칙을 사용하십시오. 일관된 명명 규칙을 사용하면 코드를 더 읽기 쉽고 유지 관리할 수 있습니다. 예를 들어 소품에 다음 명명 규칙을 사용할 수 있습니다. camelCase구성 요소에 전달되는 소품의 경우 kebab-case구성 요소의 스타일을 지정하는 데 사용되는 소품의 경우 주석을 사용하십시오. 주석은 코드가 수행하는 작업을 설명하는 데 도움이 될 수 있습니다. 예를 들어 특정 소품의 목적을 설명하는 주석을 추가할 수 있습니다. 코드를 더 작은 파일로 나눕니다. 큰 파일은 읽고 유지 관리하기 어려울 수 있습니다. 각 구성 요소 또는 관련 구성 요소 그룹에 대해 별도의 파일을 만들어 코드를 더 작은 파일로 나눌 수 있습니다. 코드 탐색 및 리팩터링 기능이 있는 코드 편집기를 사용합니다. 코드 탐색 및 리팩터링 기능이 있는 코드 편집기를 사용하면 코드를 보다 빠르고 쉽게 변경할 수 있습니다. 예를 들어 변수 또는 함수의 정의로 빠르게 이동할 수 있는 기능이 있는 코드 편집기를 사용할 수 있습니다. 디버거를 사용하십시오. 디버거는 코드를 한 줄씩 단계별로 실행하고 변수 값을 검사하는 데 도움이 될 수 있습니다. 이는 코드의 문제를 디버그하려고 할 때 유용할 수 있습니다. 라고 bard가 대답했습니다.

외 2개 답변 보러 가기

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!