Frontend 개발자 - hyo.loui
리액트 - 구조 분해 할당(js 문법) 본문
❤️🔥TIL : Today I Learned
구조 분해 할당 - 자바스크립트 표현식
구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여
그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.
(출처: MDN)
- 구문
var a, b, rest;
[a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]
({ a, b } = { a: 10, b: 20 });
console.log(a); // 10
console.log(b); // 20
// Stage 4(finished) proposal
({a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40});
console.log(a); // 10
console.log(b); // 20
console.log(rest); // {c: 30, d: 40}
위 처럼배열이나 객체를 쪼개 필드 값을 변수에 담을 수 있다.
- 배열 구조 분해
const 과일 = ['사과', '바나나', '배'];
const [one, two, three] = 과일;
console.log(one, two, three);
// 사과, 바나나, 배
const 나이 = [26, 24, 52];
const [나, 동생] = 나이;
console.log(나, 동생);
// 26, 24
분리된 선언도 구조 분해가 가능하다
let me, sister;
[me, sister] = [26, 24];
console.log(me); // 26
console.log(sister); // 24
- 객체 구조 분해
React에서의 props 형태가 객체이기 때문에
우리가 구조분해를 사용 할 수 있다.
const 사과 = {
종류: 'fruit',
색: 'red',
모양: 'circle'
}
const { 종류, 색, 모양 } = 사과;
console.log(종류, 색, 모양); // 'fruit', 'red', 'circle'
- 다만 for 문을 이용하여 args 를 하나씩 돌아 넘겨줘야 합니다!
- (**kwargs)
매개변수를 딕셔너리 형태로 받을 수 있습니다!
# 딕셔너리 반환
# 키워드 인수를 여러 개 받는 방법!
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='bob') # {'name': 'bob'}
get_kwargs(name='john', age='27') # {'name': 'john', 'age': '27'}
구조 분해 할당 - React 표현식
- useState
function Login() {
const [inputValue, setInputValue] = useState({
email: '',
password: '',
});
// useState 에 들어갈 객체
const { email, password } = inputValue;
// 구조 분해 할당식
const handleInput = event => {
const { name, value } = event.target;
setInputValue({
...inputValue,
[name]: value,
});
};
return (
<form className='loginInput'>
<input name='email' onChange={handleInput} />
<input name='password' onChange={handleInput} />
</form>
);
}
- 함수 컴포넌트 안에서의 구조 분해 할당
- 본문 안에서의 구조 분해 할당
// TodoList.jsx
const TodoList = () => {
// 오늘 할 일
const [todo, setTodo] = useState([
{
id: 1,
title: "환기 시키기",
content: "오늘 17시에 빨래하고 18시에 널기",
done: true,
}
]);
// 제목, 내용 빈값(빈칸)
const [title, setTitle] = useState("");
const [content, setContent] = useState("");
// 오늘 할 일 + 새로운 할 일
const addTodoHandler = () => {
const newTodo = {
id: todo.length + 1,
title: title,
content: content,
done: false,
};
setTodo([...todo, newTodo]);
};
return (
<Layout>
<Header
title={title}
setTitle={setTitle}
content={content}
setContent={setContent}
addTodoHandler={addTodoHandler}
/>
// 이 부분에서 props로 넘겨주고 있다
<List todo={todo} setTodo={setTodo}/>
</Layout>
);
};
// Header.jsx
const Header = (props) => {
const { title, setTitle,content, setContent, addTodoHandler} = props
// 헤더에서 받아온 props를 함수 컴포넌트안에서 구조분해 할당으로 가져왔다
return (
<header>
<label> 제목 </label>
<input
value={title} // title
placeholder="오늘의 할 일 입력해주세요"
// 인풋 이벤트로 들어온 입력 값을 name의 값으로 업데이트
onChange={(e) => setTitle(e.target.value)} // setTitle
/>
<label> 내용 </label>
<input
value={content} // content
placeholder="상세 내용을 입력해주세요"
// 인풋 이벤트로 들어온 입력 값을 age의 값으로 업데이트
onChange={(e) => setContent(e.target.value)} // setContent
/>
<CustomButton color="green" onClick={addTodoHandler}> // addTodoHandler
추가하기
</CustomButton>
</header>
);
};
- 인자 안에서 구조분해 할당
function Components({ elements }) { // elements
return (
<>
<li className="message-list-box">
<div>
<span className="message-list-id">ex id</span>
<span className="message-list-content">{elements}</span> // elements
</div>
<button className="message-list-delete-button">X</button>
</li>
</>
);
}
최종 정리
- 구조분해할당 : 배열을 해체하여 순차적으로 개별 변수에 담는 것
- 리액트에서는 함수 컴포넌트 안에서 구조 분해 할당을 사용한다
- [인자안에서, 본문안에서] 구조 분해 할당 할 수 있다
- 나는 인자가 너무 길어지는 것이 불편해서, 본문안에서 구조 분해 할당을 사용한다
'React.js' 카테고리의 다른 글
리액트 - children 안보임 에러 해결 (6) | 2022.12.13 |
---|---|
리액트 - useEffect 핵심 기능 (1) | 2022.12.12 |
리액트 - useState 동작 2가지(일반형, 함수형) (1) | 2022.12.12 |
리액트 - 코드 구조 파악하기 (1) | 2022.12.11 |
리액트 - component, props, state (0) | 2022.12.09 |