❓ 참고) 배열 비구조화 할당(ES6의 destructuring문법)
→ 배열 비구조화 할당은 배열 안에 들어 있는 값을 쉽게 추출할 수 있도록 해 주는 문법이다.const array = [1,2]; const one = array[0]; // 1 const two = array[1]; // 2 배열 비구조화 할당을 사용하면? const array = [1,2]; const [one, two] = array;
// ( Say.js )
import React, { useState } from 'react';
function Say(){
const [message, setMessage] = useState('');
function onClickEnter(){
setMessage('안녕하세요!');
}
function onClickLeave(){
setMessage('안녕히가세요!');
}
return(
<div>
<button onClick={ onClickEnter }>입장</button>
<button onClick={ onClickLeave }>퇴장</button>
<h1> { message } </h1>
</div>
);
};
export default Say;
/* 잘못된 코드 */
// 함수형 컴포넌트
const [object, setObject] = useState({ a: 1, b: 1 });
object.b = 2;
/* 올바른 코드 */
// 객체 다루기
const object = { a: 1, b: 2, c: 3 };
const nextObejct = { ...object, b: 2 }; // 사본을 만들어서 b값만 덮어쓴다.
// 배열 다루기
const array = [
{ id: 1, value= true },
{ id: 2, value= true },
{ id: 3, value= false }
];
let nextArray = array.concat({ id: 4 }); // 새 항목 추가
nextArray.filter( item => item.id !== 2 ); // id가 2인 항목 제거
nextArray.map( item => ( item.id === 1 ? { ...item, value: false } : item ));
// id가 1인 항목의 value를 false로 설정
❓ 참고) 리액트 대 원칙: immutable data
→ state는 직접적으로 변경이안되기 때문에 state를 변경하고 싶으면복사본
을 만든 후 그 복사본의 상태를 setState를 통해 바꾼다.
- deep copy : 값공유x , 서로 독립적인 값을 가지는 복사
- ❌ let newArray = message; (복사가아니라 값 공유 => reference data type 참고)
⭕ let newArray = [...message]; (값 공유가 되지않고 복사)
❓ 참고) 미리정의된 함수를 넣을때는 소괄호()를 넣지않는다.
why? 소괄호()를 넣으면 함수가 바로 실행된다.
❓ 참고)