Language/React
React 구조분해할당
conqueror-G
2022. 6. 18. 23:01
1. 구조분해할당
State
이벤트 객체의 value값을 가져오고 싶을 때 이렇게 사용한다.
구조분해 할당을 사용하지 않았을 때
const onChange = (event) => {
setState(event.target.value);
};
구조분해 할당을 사용했을 때,
구조분해할당을 사용하지 않고도 사용할수는 있지만 타고 타고 들어갈 때 길어지게 되면서 가독성을 해치는 결과를 얻게되어 구조분해 할당을 사용한다.
const onChange = (event) => {
const { value } = event.target;
// event.target.value
};
이벤트 객체에 대한 내용이 아니라 일반객체여도 이렇게 사용할 수 있다.
person이라는 객체의 { }를 벗겨냈기 때문에 console.log(name, age)라고 작성해도 값이 출력되는 것이다.
let person = {
name: "minseok",
age: 20
};
let { name, age } = person;
// person.name
// person.age
console.log(name, age); // minseok 20
props
부모 컴포넌트로부터 데이터를 받아올 때도 사용할 수 있다.
- 처음 세팅은 상수데이터로 DATA를 선언해서 CardList라는 컴포넌트에게 넘겨준다.
function Monsters() {
const DATA = {
id: 1,
name: "Leanne Graham",
username: "Bret",
email: "Sincere@april.biz",
address: {
street: "Kulas Light",
suite: "Apt. 556",
city: "Gwenborough",
zipcode: "92998-3874"
}
};
return (
<div className="monsters">
<h1>컴포넌트 재사용 연습!</h1>
<CardList CardList={DATA} />
</div>
);
}
- Monsters라는 컴포넌트에서 넘겨받은 데이터를 사용하려면 두 가지 방법이 있는데, 구조분해할당을 사용하는 방법과 사용하지 않는 방법이 있다. 먼저 사용하지 않는 방법을 소개하자면 코드는 이렇다.
function CardList(props) {
return (
<div className="cardList">
<p>{props.CardList.name}</p>
</div>
);
}
p태그 안에 있는 값의 형태를 보자. 먼저 { }가 있고 그 안에 props.CardList.name이라고 적혀있는데, 이것을 표현하면 이 아래의 코드와 같다. 내가 원한건 name이라는 키에 들어있는 값이기 때문에 props에서 CardList라는 키에 접근하고 CardList에서 name이라는 키에 접근하는 것이다.
const props = {
CardList: {
name: "Leanne Graham"
}
};
- 다음은 구조분해를 사용하는 것이다. 애초에 구조분해라는 것이 무엇일까? { }를 벗긴다고 하는 표현이 맞을 것 같다.props를 벗겨냈다? 라는 표현이 맞을 것이다.
CardList: {
name: "Leanne Graham";
}
props를 벗겨냈기 때문에 CardList.name으로 접근하면 된다. 다만 벗겨낸 이후의 키를 인자로 받아야한다.
어떻게 하냐면…
function CardList({ CardList }) {
return (
<div className="cardList">
<p>{CardList.name}</p>
</div>
);
}
- 객체 안의 객체 데이터에 접근하는 구조분해 할당
const CardList = ({
CardList: {
address: { street }
}
}) => {
return <div>{street}</div>;
};
- 해당 컴포넌트에서 사용할 데이터 추가하기
few = “11”은 위의 상수데이터에서는 없는 데이터를 추가한 것이다.
const CardList = ({ CardList: { id, name, email, few = "11" } }) => {
return <div>{few}</div>;
};