React를 공부하기전 자바스크립트를 대략적으로 복습하는 단원 입니다.
React에서 자주나오는 내용들을 대략적으로 복습 합니다.
export 방법 : export 변수 변수명 = “더미텍스트";
[util.js]
export let apikey = "aaaaaaaaaaa1";
import 방법 : import { 변수명 } from "./파일명.js“;
[app.js]
import {apikey} from "./util.js";
export 방법 : export default “더미텍스트”;
[util.js]
export default "aaaaab1";
import 방법 : import 임의의변수명 from "./파일명.js“;
[app.js]
import apiapikey from “./util.js”;
[util.js]
export let apikey = "aaaaaaa11";
export let apikey2 = "bbbbbbb22";
export default "cccccccc33";
[app.js]
import { apikey, apikey2, default as apikey3 } from "./util.js"
console.log(apikey, apikey2, apikey3);
또는
[app.js]
import { apikey, apikey2 } from "./util.js"
import apikey3 from "./util.js" // default의 변수명을 apikey3로 지정
[util.js 파일]
export let apikey = "aaaaaaa11";
export let apikey2 = "bbbbbbb22";
export default "cccccccc33";
[app.js 파일]
import * as 아무객채명 from "./util";
console.log(아무객체명.apikey, 아무객채명.apikey3, 아무객채명.default);
[util.js 파일]
export let apikey = "aaaaaaa11";
[app.js 파일]
import {apikey as 별칭} from "./util"
console.log(별칭);
- import할때 상위폴더에 파일이 존재한다면 점을 하나 더붙인다
ex) ../util.js- import할때 js 확장자는 자바스크립트만 사용할때 반드시 붙여주어야한다.
리액트 프로젝트로 작업한다면 생략이 가능하다. 빌드 프로세스가 확장자를 추가하기 때문.- 파일별로 하나의 default export만 존재할 수 있다.
- import 또는 export 키워드를 사용할때는 type="module"을 반드시 사용해야함.
리액트 프로젝트 작업시 생략 가능하다. import나 export 파일들의 개별 파일들을 모두 합쳐서 하나의 파일로 만들어 처리한다. 이러면 import나 export를 지원하지 않는 브라우저에서도 코드를 실행할 수 있고 하나의 큰 파일을 다운로드만 하면 되므로 더 효율적이다.
( 매개변수1, 매개변수2, ... ) => { . . . }
let foo = (place,game) => { return place + "에서 " + game +" 하고 놀기 " };
let result = foo("수원","보드게임");
console.log(result); // 수원에서 보드게임 하고 놀기
매개변수를 묶는 소괄호를 생략할 수 있다.
매개변수 => { . . . }
let foo = game => { return game + " 하고 놀기 " };
let result = foo("보드게임");
console.log(result); // 보드게임 하고 놀기
매개변수를 묶는 소괄호를 생략할 수 없다.
let foo = => { return "놀기" }; // SyntaxError
let foo = place,game => { return place + "에서 " + game +" 하고 놀기 " }; // SyntaxError
화살표 함수에 반환문 외에 다른 로직이 없을 경우, return 키워드와 중괄호를 생략할 수 있음.
let foo = place => place + "에서 놀기 ";
let result = foo("수원");
console.log(result); // 수원에서 놀기
다른 로직이 없어서 중괄호를 생략하기로 했다면, return 키워드까지 빼주어야한다. (옵션이 아닌 필수)
다음 코드는 에러가 발생한다.
let foo = place => return place + "에서 놀기 "; // SyntaxError: Unexpected token 'return'
자바스크립트는 중괄호를 함수 본문 래퍼로 취급하기에 아래와 같은 코드는 올바르지 않다.
let foo = num => {age:num};
let result = foo(10);
console.log(result); // undefined
console.log(typeof result); // undefined
객체를 생성하여 반환한다고 명시하기 위해서는 중괄호를 소괄호로 더 감싸주어야 한다.
let foo = num => ({age:num});
let result = foo(10);
console.log(result); // { age: 10 }
console.log(typeof result); // object
메소드를 사용할때 함수에 들어가는 매개변수는 한가지가 아니라 여러가지가 들어가지만, 간단하게 필수 매개변수로만 사용하였다.
또한 배열의 메소드를 사용할때 일반함수를 사용해도 되지만, 화살표 함수를 사용하는 경우가 많다.
배열.findindex(function(매개변수) { .. } )
findindex : 함수를 실행하여 함수의 조건에 맞는 원소의 인덱스를 반환한다.
const place = ["수원" , "서울", "부산"];
console.log(place.findIndex((item)=>{ return item === "부산"})); // 2
배열.map(function(매개변수) { .. } )
map이란 새 배열을 반환한다. 기존 배열을 수정하는것이 아님을 알아두자.
객체를 반환하기
function transformToObjects(numberArray) {
return numberArray.map( (item) => ({ val : item}) );
}
const newArr = transformToObjects([1,2,3]);
console.log(newArr); // [ { val: 1 }, { val: 2 }, { val: 3 } ]
곱셈을 하여 새로운 숫자로 반환하기
const ArrayEx = [10 , 100 , 1000];
const newArrayEx = ArrayEx.map( item => item * 10 );
console.log(ArrayEx); // [ 10, 100, 1000 ] 기존배열을 수정하지않음.
console.log(newArrayEx); // [ 100, 1000, 10000 ]
배열을 디스트럭처링하여 변수에 저장하기.
기존의 방식을 사용한다면 배열의 인덱스로 접근하여 변수에 저장 했었다.
const userNameData = ["Kim", "Minho"];
const firstName = userNameData[0];
const lastName = userNameData[1];
console.log(firstName + Minho); // KimMinho
디스트럭처링 방식을 사용한다면 좀더 간결하게 변수에 저장하는것이 가능하다.
const [firstName, lastName] = ["Kim", "Minho"];
console.log(firstName + lastName); // KimMinho
객체또한 디스트럭처링 할 수 있다.
기존의 방식은 . 접근방식으로 변수에 저장 했었다.
const user = {
name : "Minho",
age : 98
};
const name = user.name;
const age = user.age;
console.log(name+"은"+age+"살"); // Minho은98살
디스트럭처링 방식을 사용한다면 간결하게 저장할 수 있다.
유의할점은 객체의 프로퍼티명과 매개변수명은 동일하게 해주어야 하지만, 콜론을 사용해 별칭을 사용하는것은 가능하다.
const {name : userName, age} = {
name : "Minho",
age : 98
};
console.log(userName+"은"+age+"살") ; // Minho은98살
배열들을 병합하여 새로운 배열을 생성한다.
const arr1 = ["컴퓨터", "노트북", "태블릿PC"];
const arr2 = ["스마트폰"];
const mergeArr = [...arr1 , ...arr2];
console.log(mergeArr); //[ '컴퓨터', '노트북', '태블릿PC', '스마트폰' ]
스프레드 문법을 사용하지 않는다면 중첩배열이 생성됨을 유의하자. 이런식으로 사용하는 경우가 있겠지만 사용 빈도수가 비교적 적다.
const arr1 = ["컴퓨터", "노트북", "태블릿PC"];
const arr2 = ["스마트폰"];
const mergeArr = [arr1 , arr2];
console.log(mergeArr);//[ [ '컴퓨터', '노트북', '태블릿PC' ], [ '스마트폰' ] ]
객체에도 스프레드 문법을 사용할 수 있다.
const user = {
home : "고양시",
age : 100
};
const extendedUser = {
weight : 68,
...user
};
console.log(extendedUser);
function greeter(greetFn) {
greetFn();
}
greeter(() => console.log("안녕하세요"));
greeter(() => console.log("반갑습니다"));
greeter(() => console.log("안녕히계세요"));
function greeter(greetFn) {
greetFn();
}
greeter(() => console.log("안녕하세요"));
greeter(() => console.log("반갑습니다"));
greeter(() => console.log("안녕히계세요"));
function handleTimeout() {
console.log("시간초과");
}
function handleTimeout2() {
console.log("시간초과!!");
}
내장함수 setTimeout(함수,지연시간);
내장함수 매개변수에서 함수를 값으로 받는 경우
setTimeout(handleTimeout,2000); // 시간초과
setTimeout(handleTimeout2,3000); // 시간초과!!
내장함수 매개변수에서 함수를 직접 서술할경우
setTimeout(() => console.log("시간초과!!!!"),4000) // 시간초과!!!!
매개변수로 함수를 값으로 받을경우에는 () 를 쓰지말자.
()를 쓰면 값을 반환하려 하기 때문에, 함수자체를 전달하려고하는 개발자의 의도와는 틀리게된다.
setTimeout(handleTimeout(),2000); // TypeError
바닐라 자바스크립트에서는 거의 사용하지 않는 기능이지만, 리액트 코드 작성할 때는 자주 사용한다.
(1), (2), (3)은 실행 순서
function init() {
function greet() { // (3)
console.log("하이");
}
greet(); // (2)
}
init(); // (1)