행복을 담는 블로그
[React] React에서 자주 사용하는 ES6 문법 본문
React 개발을 하기 위해서 꼭 필요한 JS 문법 중 ES6 문법에 대해 알아보자.
📕 Javascript ES6 문법
1.상수와 변수
- 상수 : const(constant : 변함없는 수)
- 변수 : let
const a = 1;
let b = 3;
a = 3; // 상수는 한 번 선언한 값을 다시 할당할 수 없다.
b = 2; // 변수는 값을 재할당 가능
console.log("a :", a); // Error
console.log("b :", b); // b : 2
- var는 그냥 쓰지마쓰지마...!!
:Block level scope
를 따르지 않기 때문에 종종 다른 언어와 오해가 발생한다.
if (1 === 1) {
// 항상 이 안으로 들어온다
var c = 3;
console.log("c :", c); // c : 3
}
console.log("바깥 c :", c); // 바깥 c : 3
// var는 block level scope를 가지지 않는다. = {} 밖에서도 값이 그대로 선언된다.
2. Object, 객체 복사
✔️ Javascript에서 말하는 object
: key-value pair
1) 객체 선언
: {중괄호} 안에 key-value pair 형태로 선언
const testObj = {
name: "hyunjin",
age: "25",
company: "none",
doSomething: () => {}, //value에는 함수도 들어갈 수 있다.
};
2) 단축 속성
: key-value가 일치하면, 하나로 생략 가능!!
const name = "hyunjin";
const age = 27;
const testObj = {
name, // key 와 상수이름이 같으면, name : name으로 쓸 수 있고, name 하나로만 작성 가능!
age,
company: "none",
doSomething: () => {}, //value에는 함수도 들어갈 수 있다.
};
3) 🚨복사 주의🚨 얕은 복사!
const obj1 = {
value1: 10,
};
const obj2 = obj1; // 얕은 복사
console.log("obj1", obj1); // {value : 10}
console.log("obj2", obj2); // {value : 10}
🧐 근데 만약 내가 obj2를 바꾼다면?
- 예상 : obj2만 바뀐다
- 실제 : obj1 도 같이 바뀜..! 띠용...!
const obj1 = {
value1: 10,
};
const obj2 = obj1; // 1번째 방법(얕은 복사)
const obj3 = JSON.parse(JSON.stringify(obj1)); // obj1을 문자열 형태로 쫙 풀어버렸다가 다시 묶는다.
// = 새로운 객체를 만든다. = 다른 주소값을 생성해버린다 = 새로운 주소값을 반환한다.
obj1.value1 += 1;
console.log("obj1", obj1); //obj1 { value1: 11 }
console.log("obj2", obj2); //obj2 { value1: 11 }
console.log("obj3", obj3); //obj2 { value1: 10 } // 얘는 값이 obj1 값을 그대로 지켜준다!
📌 JSON.parse() / JSON.stringify()
- JSON.parse() : JSON의 형태가 아닌걸 넣으면 JSON 형태로 다시 묶어줌!!
- JSON.stringify() : JSON 형태를 문자열로 쫙 풀어버림..!
주로 객체의 key-value의 값은 "주소값"으로 data가 저장이 되므로, obj2의 value 값을 바꾸고 싶어도 얕은 복사로 인해 obj1의 값이 함께 바뀌게 된다.
이를 방지하기 위해 obj3와 같은 방법으로 value 값만 수정할 수 있다.
3. Template Literals (벡틱 사용)
: 여러줄 작성이 가능하다. Multi-line 지원이 된다!
1) 일반 텍스트
`안녕하세요`
2) 멀티라인 가능
`안녕하세요
제 이름은 홍길동입니다.
나이는 30살 입니다. `
3) place holder를 이용한 표현식
: ${ 변수명 } 중괄호 안에 변수명
을 넣어줄 수 있다!!
→ javascript 과제를 진행할 때, 주로 사용했던 값을 입력해주는 방식이었다.
const testValue = 3;
console.log(`문자열 ${testValue} 입니다.`); // 문자열 3 입니다.
// placeholder를 이용하여 변수명을 넣어 원하는 값을 넣을 수 있다.
4.배열 / 객체 비구조화(Array/Object Destructuring)
: 구조분해할당이라고도 한다.
- De(out, 반대) + Structur + ing : 구조를 분해해서 반대로 한다. = 배열의 구조, 객체의 구조를 뜯어버린다!!
1) 객체의 구조분해할당
: key 값을 이용하여, 각각의 value에 접근한다.
++ ${} : placeholder 방식도 자주 사용한다.
const person = {
name: "홍길동",
age: 30,
};
const { name, age, norFound } = person;
console.log("name", name); // name 홍길동
console.log("age", age); // age 30
console.log("norFound", norFound); // norFound undefined
2) 배열의 구조분해할당
: index를 활용하여 각각의 값들에 접근한다.
const testArr = [1, 2, 3, 4, 5];
const [one, two, three, four, five, six] = testArr;
console.log("one : ", one); // one : 1
console.log("two : ", two); // two : 2
console.log("three : ", three); // three : 3
console.log("four : ", four); // four : 4
console.log("five : ", five); // five : 5
console.log("six : ", six); // six : undefined
5. 전개 연산자 (Spread Operator)
- spread operator(...)
: 배열 내 각 값들을 풀어 헤쳐서 하나하나에 접근하겠다.
let [name, ...rest] = ["hyunjin", 25, "seoul"];
console.log("name", name); // name hyunjin
console.log("rest", rest); // rest [ 25, 'seoul' ] // ...으로 풀어헤쳐서 나머지를 다 가져와
ex)
let tom = {
name: "Tom",
age: 10,
region: "Seoul",
};
let steve = {
...tom,
name: "Steve",
};
console.log(tom); //{ name: 'Tom', age: 10, region: 'Seoul' }
console.log(steve); //{ name: 'Steve', age: 10, region: 'Seoul' }
6. 화살표 함수(Arrow Function)
// 1. 기본 함수 형태
function mysum1(x, y) {
return x + y;
}
// 2. 화살표 함수
const mysum2 = (x, y) => {
return x + y;
};
//3. 이때 return문이 한 줄이면 중괄호 빼줘야함!!
const mysum3 = (x, y) => x + y;
console.log(mysum1(1, 2)); // 3
console.log(mysum2(1, 2)); // 3
console.log(mysum3(1, 2)); // 3
Javascript에서 배운 기본 문법 내용들이었지만, react에서도 자주 사용된다고 하니, 잘 익히고 익숙하게 만들도록 하자.
'FrontEnd > React' 카테고리의 다른 글
[React] React Component / 컴포넌트 (0) | 2024.01.22 |
---|---|
[React] State 이용하여 간단한 로그인 화면 만들기 (0) | 2024.01.19 |
[React] JSX (JavaScript + XML) 문법 (0) | 2024.01.18 |
[React] Mac CRA 초기 프로젝트 생성 시, 오류 발생 / CRA로 프로젝트 생성하기 (0) | 2024.01.18 |
[React] React 가 무엇인가? 왜 React를 배워야 하는가? (0) | 2024.01.17 |