[TIL/React] 2023/07/08
forwardRef부모 컴포넌트에 ref가 있는 경우, 자식 컴포넌트를 부모 컴포넌트에서 노출하기 위해서는 forwardRef의 사용이 필요하다.reference: https://react.dev/reference/react/forwardRef우선 'ref 값
forwardRef
부모 컴포넌트에 ref가 있는 경우, 자식 컴포넌트를 부모 컴포넌트에서 노출하기 위해서는 forwardRef의 사용이 필요하다.

reference: https://react.dev/reference/react/forwardRef#usage
우선 'ref 값'을 전달하고자 하는 컴포넌트를, forwardRef 함수에 담아준다. 해당 컴포넌트는 props와 ref를 argument로 받는다. props와 ref를 명확히 이해하기 위해 몇가지 테스트를 진행했다.
1. 반드시 props를 'props'라는 형태로 전달해야 하는가? 구조분해할당이 적용되는가?


현재 진행 중인 프로젝트는 App.js라는 최상단 파일에서 ref를 선언하고 있고, HomePage라는 자식 컴포넌트를 부모 컴포넌트(App.js)에서 노출하기 위해 forwardRef가 적용된 상태이다.
HomePage에 props로 'a'를 전달했다. 구조분해할당이 가능하다면, HomePage에서 console을 찍으면 '123'이라는 string이 출력될 것이다. 위에 보이는 바와 같이 잘 출력되었다.
반드시 'props'라는 형태를 고수할 필요는 없고, forwardRef에서도 구조분해할당으로 props를 전달해도 된다는 사실을 알았다.
2. props와 ref의 순서를 변경해도 되는가?


argument의 순서만 변경했을 뿐인데 runtime error가 발생한 것을 확인할 수 있다. 'props'와 'ref'의 순서는 반드시 지켜줘야 함을 알았다.
3. ref라는 이름으로 props를 전달받는 것도 구조분해할당의 일환 아닌가? 그렇다면 a와 ref를 동시에 중괄호로 묶는 것도 가능한가?


역시나 runtime error가 발생한다.
정리
forwardRef는, 부모 컴포넌트에서 자식 컴포넌트를 노출해야 할 때, 부모 컴포넌트에서 선언한 ref를 자식 컴포넌트로 전달하기 위한 하나의 방식이다.
props와 ref를 argument로 받고, props는 구조분해할당의 적용이 가능하며 props와 ref를 받는 순서는 runtime에 있어 의미가 있다.
일반적으로 appbar에서는 라우팅 관련 로직을 처리하고, scrollbar는 개별 페이지에서 활용한다. scroll을 appbar에서 구현하려다보니 파일의 구조가 복잡해졌고, 그 연장선에서 ref를 중첩된 여러 파일에 전달하는 과정이 어려워진 것이다.
일반적인 파일 구조가 어떻게 구성되는지 다시금 생각해볼 수 있는 기회가 되었고, ref라는 개념 자체에 대한 이해가 깊어졌다.
회고
개념 한 가지를 더 아는 것도 중요하지만, 결국 상위 레벨에 대한 방향성을 제대로 설정하는 것이 가장 중요하다는 것을 깨닫게 된 하루였다. 문제 해결의 과정에서 초기에(=상위 레벨 구현에) 많은 고민을 하지 않아서 1도가 틀어지면, 하위 레벨에서는 그 '틀어짐'을 감당할 수 없게 된다. '코딩' 전에 '문제 해결'이고, '문제 해결' 전에 '문제 정의'이다. 잘 하자!
More to read
Amazon VPC Architecture 이해하기
새로운 프로젝트를 기획하며, 개발에서 무엇을 가장 먼저 고민해야 하는지 다시 돌아보게 되었습니다.한때는 프론트엔드가 모든 설계의 출발점이라고 믿었습니다. 유저가 무엇을 보고, 어떤 흐름에서 머무르고 이탈하는지에 대한 이해 없이 서비스를 만든다는 건 불가능하다고 생각했기
'원사이트'프론트엔드 관점으로 알고리즘 이해하기
오랜만에 방법론에 관한 글을 쓰게 되었습니다. 최근 상황은 이렇습니다. SSAFY에서는 하루에 엄청난 양의 알고리즘 문제들을 과제로 수행하게 됩니다. 그 과정에서, '구현력'이 매우 떨어진다는 생각이 들었습니다. 완전히 어려운 문제라면 '아쉬움'이라는 감정조차 느끼지
SubnetVPC 설계의 시작: IP와 Subnet
반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계