본문 바로가기
dev/React

[React] 속성 전달

by dev_Step 2022. 11. 29.

 >> 리액트는 반드시 부모 컴포넌트에서 직계 자식 컴포넌트로만 속성이 내려가게 하는 연쇄적인 명령 실행만 가능하다. 

속성을 전달할 때 중간 계층을 건너 뛸 수 없다는 의미이며, 또한 자식으로부터 부모로 속성을 거꾸로 올려보낼수 없다.

속성은 1개씩 타고 내려가며, root로 부터 color = "red" 가 들어가게 되면 한칸 단계씩 옴겨져야 한다

color = {this.props.color} ~~ 만약 보내야 속성이 1개가 아닌 n개 가 된다면 어떻게 될까?

 

예제를 통해서 알아보자

ReactDOM.render() 에서 정의된 값이 각 컴포넌트들에게 전달되어 마지막에 있는 곳에서 Display 컴포넌트에서 값을 표시하였다. 즉 목적지를 향하는 경로에 있는 모든 컴포넌트들이 각 속성에 접근하고 재정의해 전달하는 것이다.

Shirt -> Label -> Display 모든 컴포넌트들에게 전달 및 재정의 하여 재전달된다.

 

>> 이 문제의 해결은 최근 자바스크립트 표준에 포함된 스프레드 연산자에 있다.

 - items 배열에 있는 세 개의 값을 printStuff 함수에 인자로 넘겨 호출하고자 한다.

var items = ["1","2","3"]

function printStuff(a,b,c){
	console.log( "Printing : " + a + " " + b + " " + c);
}

printStuff( itmes[0], items[1], items[2])  매우간단하다

 하지만  스프레드 연산자를 사용하면 더 쉬워진다. 

printStuff(...items); 

>> items 앞에 있는 "..." 가 스프레드 연산자이다. 즉 ...items 라고 하면   itmes[0], items[1], items[2]와 동일한 의미이다.

즉 . 스프레드 연산자는 배열 안의 개별 요소를 밖으로 풀어내는 역할을 한다.

 

컴포넌트에 걸쳐 속성을 전달하는 문제는 배열의 각 아이템에 일일이 접근하는 문제와 매우 유사하다.

컴포넌트 안의 props 객체는 다음과 같은 모습이다.

var props = {
	color : "steelblue",
    num : "3.14",
    size : "medium"
}

이들 속성 값을 자식 컴포넌트에 전달하려면 다음과 같이 props 객체의 각 아이템에 일일이 접근해야 한다.
<Display color={this.props.color} num={this.props.num} size={this.props.size} />

스프레드 연산자를 사용해 배열을 풀수 있듯이, 속성과 값 쌍을 전달할수 있다면 좋지 않을까
방법이 있다.

...props를 사용해 Display 컴포넌트를 호출할 수 있다.

<Display {...this.props} />

 

스프레드 연산자를 통해서 표현해도 동일한 결과가 출력된다.

'dev > React' 카테고리의 다른 글

[React] 상태 다루기  (0) 2022.11.30
[REACT] JSX 특징  (0) 2022.11.30
[React] 복잡한 컴포넌트 제작  (0) 2022.11.29
[React] 리액트 스타일링  (0) 2022.11.29
[React] React Component  (0) 2022.11.29