Develop

    [React] memo / useMemo

    memo 컴포넌트가 재렌더링되면 내부에 있는 자식 컴포넌트는 항상 함께 재렌더링된다. 컴포넌트가 props로 동일한 결과를 렌더링한다면, memo를 호출하고 결과를 메모이징(Memoizing) 하도록 래핑하여 경우에 따라 성능을 향상할 수 있다. memo를 사용하면 react가 컴포넌트를 렌더링하지 않고 마지막으로 렌더링된 결과를 재사용한다. const MemoizedComponent = memo(SomeComponent, arePropsEqual?) import { memo } from 'react'; const Song = memo(function Song({ title, singer }) { return ( Song title: {title} Singer: {singer} ); }); export ..

    [React] lazy import

    lazy import 리액트로 만드는 Single Page Application의 특징은 빌드 시 html, js 파일이 하나만 생성된다. 그 안에 지금까지 만든 모든 내용이 들어있어 파일 사이즈가 약간 크다. 이런 이유에서 리액트 사이트들은 첫 페이지 로딩속도가 매우 느릴 수 있다. 이를 개선하기 위해 코드를 분할할 수 있다. import 할 컴포넌트가 바로 렌더링 되지 않을 때, 컴포넌트가 처음 렌더링 될 때(필요할 때)까지 import를 미루는 것이다. import MarkdownPreview from './MarkdownPreview.js'; 위 코드를 아래와 같이 바꿀 수 있다. import { lazy } from 'react' const MarkdownPreview = lazy(() => i..

    [JavaScript] localStorage 사용하기

    localStorage 문법 1. 데이터 추가, 읽기, 삭제 localStorage.setItem('데이터이름', '데이터'); localStorage.getItem('데이터이름'); localStorage.removeItem('데이터이름') 2. array/object 자료 저장 localstorage는 문자만 저장할 수 있는 공간이라 array/object를 바로 저장할 수 없다. array/object -> JSON 이렇게 변환해서 저장해야 한다. (JSON -> 문자취급) 데이터 저장 (array/object -> JSON) localStorage.setItem('obj', JSON.stringify({name:'jane'}) ); 데이터 읽기 (JSON -> array/object) var a ..

    [React] React에서 if 구문 사용하기

    1. 컴포넌트 안에서 쓰는 if/else function Component() { if ( true ) { return 참이면 보여줄 HTML; } else { return null; } } 자바스크립트 if문은 return () 안의 JSX 내에서는 사용할 수 없다. if (조건) {실행문} => (X) 그래서 보통 return + JSX 전체를 가지는 if문을 사용한다. + 주로 else 생략 function Component() { if ( true ) { return 참이면 보여줄 HTML; } return null; } 2. JSX안에서 쓰는 삼항연산자 (ternary operator) function Component() { return ( { 1 === 1 ? 참이면 보여줄 HTML : nu..

    [JavaScript] Destructuring Assignment (구조 분해 할당)

    구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 자바스크립트 표현식이다. 배열 및 객체 리터럴 표현식을 사용하면 즉석에서 쉽게 데이터 뭉치를 만들 수 있다. 구조 분해 할당 구문은 이와 비슷하지만, 대신 할당문의 좌변에서 사용하여, 원래 변수에서 어떤 값을 분해해 할당할지 정의한다. 배열 구조 분해 var [a, b, c] = [1, 2, 3]; var d, e; [d, e] = [4, 5]; // 선언이 분리되어도 구조 분해 할당 가능 var [a, b, c] = [2, 3]; // c = undefined var [a, b, c = 5] = [2, 3]; // default 값 설정 가능, 분해한 값이 undefined일 때 대신 사용 var [a, b..

    [JavaScript] ?.(Optional Chaining) / ??(Nullish Coalescing Operator)

    ?.(optional chaining) 자바스크립트에서 객체 내부의 속성에 접근할 때, 존재하지 않는 객체에 대해 접근하면 에러가 발생한다. var obj = { one: 1, two: { name: '222'} } console.log(obj.onee); >> undefined console.log(obj.onee.name); >> Uncaught TypeError: Cannot read properties of undefined (reading 'name') at :1:10 존재하는 객체의 존재하지 않는 속성에 접근하면 undefined를 반환하지만, 존재하지 않는 객체의 속성에 접근하면 에러가 발생한다. 중첩되지 않은 간단한 오브젝트의 경우, 오브젝트에서 원하는 데이터를 찾을 수 없으면 자바스크립트..

    [JavaScript] Rest Parameter

    Spread Operator와 비슷해 보이는, 그렇지만 완전히 다른 Rest Parameter에 대해 정리해보고자 한다. Rest Parameter는 Spread Operator와 함께 ES6에 새롭게 도입되었다. Rest Parameter(나머지 매개변수) Rest 파라미터는 이름처럼 Rest 역할을 하는 매개 변수이다. 매개 변수의 이름 앞에 Spread Operator를 붙인 형태로, 함수에 전달된 인자(argument)들을 배열로 받아 준다. function restParam(...rest){ console.log(rest); } restParam(1, 2, 3); >> [1, 2, 3] Rest 파라미터는 일반 파라미터와 함께 사용할 수 있으나 반드시 가장 마지막 파라미터로 있어야 한다. fun..

    [JavaScript] Spread Operator

    Spread Operator (...) 스프레드 연산자(Spread Operator)는 자바스크립트 객체 중에 반복 가능한 Array, Object, String, Map, Set 등을 펼치는(spread out) 연산자이다. ES6에서 새롭게 도입된 문법이다. Array에 스프레드 연산자를 붙이면 다음과 같이 대괄호가 제거되어 원소만 가져올 수 있다. var arr = [1,2,3]; console.log(...arr); > 1 2 3 또한 배열 합치기, 복사(deep copy)를 할 때 유용하게 사용된다. var arr1 = [1, 2, 3]; var arr2 = [4, 5]; var arr3 = [...arr1, ...arr2]; console.log(arr3); >> [1, 2, 3, 4, 5] ..