반응형
Prop Drilling ?
Rrop Drilling은 props를 오로지 하위 컴포넌트로 전달하는 용도로만 쓰이는 컴포넌트들을 거치면서 React Component 트리의 한 부분에서 다른 부분으로 데이터를 전달하는 과정
예 ) 간단한 토글 컴퓨넌트 작성
function Toggle() {
const [on, setOn] = React.useState(false)
const toggle = () => setOn(o => !o)
return (
<div>
<div>The button is {on ? 'on' : 'off'}</div>
<button onClick={toggle}>Toggle</button>
</div>
)
}
위 컴포넌트를 2개 컴포넌트로 리팩토링 한다.
function Toggle() {
const [on, setOn] = React.useState(false)
const toggle = () => setOn(o => !o)
return <Switch on={on} onToggle={toggle} />
}
function Switch({on, onToggle}) {
return (
<div>
<div>The button is {on ? 'on' : 'off'}</div>
<button onClick={onToggle}>Toggle</button>
</div>
)
}
스위치는 'toggle' 및 'on' 핸들러가 필요해서 컴포넌트 하위 트리 구조로 코드를 리팩토링 했다.
function Toggle() {
const [on, setOn] = React.useState(false)
const toggle = () => setOn(o => !o)
return <Switch on={on} onToggle={toggle} />
}
function Switch({on, onToggle}) {
return (
<div>
<SwitchMessage on={on} />
<SwitchButton onToggle={onToggle} />
</div>
)
}
function SwitchMessage({on}) {
return <div>The button is {on ? 'on' : 'off'}</div>
}
function SwitchButton({onToggle}) {
return <button onClick={onToggle}>Toggle</button>
}
'on' 과 'toggle' 전달하려면 Switch 컴포넌트를 통해 Props를 드릴해야 한다.
Switch 컴포넌트는 실제로 함수에 그 값을 필요로 하지 않는다.
컴포넌트들의 자식이 핸들러를 필요로 하기 때문에 그 소품을 전달해야 한다.
props drilling이 무조건 적으로 문제 되는건 아니다. 2~3계층 사이에서의 데이터 전달은 괜찮다. 데이터 흐름을 쉽게 추적 가능하다.
Props Drilling 단점
계층 구조로 된 컴포넌트 들을 분리하기 어려워진다.
props가 변경 될 때마다 전역 코드를 수정 해야 한다.
대응 방법
글로벌 상태 관리 모듈을 도입한다. (e.g. Redux, context API, MobX)
컴포넌트를 여러 구성 요소로 나눈다.
object literal?
객체의 초기화를 나타내는 표현이다. 객체를 객체를 나타내는 데 사용되는 properties로 구성된다. 객체 프로퍼티 값은 원시 값 데이터 타입 또는 다른 객체를 포함 할 수 있다. 이것은 JSON (JavaScript Object Notation)과 동일하지 않다.
Default argument?
import React from 'react';
function Child({ name }){
return <div>내 이름은 {name} 입니다. </div>}// 이렇게 설정합니다.
Child.default
Props={ name: '기본 이름'}
export default Child
반응형
'Sparta x 이노베이션 캠프 > React' 카테고리의 다른 글
TIL) 리덕스에 저장된 데이터가 변경 되었을 때, 어떤 과정을 거쳐 리덕스 스토어를 구독중인 컴포넌트 A가 변경된 값을 가져올까? (0) | 2022.08.22 |
---|---|
WIL) React 라이프 사이클(함수형 vs 클래스형) , React hooks (0) | 2022.08.21 |
TIL) React 리덕스 (0) | 2022.08.18 |
TIL) 라우팅: useHistory 로 뒤로가기 버튼 만들기 (0) | 2022.08.18 |
TIL) (React) Router: Switch (0) | 2022.08.18 |