Front-end 47

TS) interface 와 type 의 차이

interface와 type은 TypeScript에서 타입을 정의하는 두 가지 방법입니다. 둘 다 객체, 함수, 클래스 등을 포함한 모든 타입을 정의할 수 있습니다. 그러나 두 방법은 몇 가지 차이점이 있습니다. interface는 주로 객체의 구조를 정의할 때 사용되고, type은 주로 타입(alias)을 정의할 때 사용됩니다. interface는 확장(extends)이 가능하지만, type은 불가능합니다. interface는 선언 합침(declaration merging)이 가능합니다. 즉, 같은 이름의 인터페이스를 여러 번 선언할 수 있고, TypeScript는 이를 자동으로 합쳐줍니다. type은 합칠 수 없습니다. interface는 구조가 비슷한 다른 인터페이스와 함께 사용될 때 유용합니다. ..

JS) 배열의 얕은 복사와 깊은 복사

자바스크립트에서 배열과 객체를 복사할 때, 얕은 복사와 깊은 복사를 구분하여 사용합니다. 얕은 복사 얕은 복사는 객체나 배열의 1단계 프로퍼티와 요소들만 복사하는 것을 말합니다. 객체나 배열 내부에 객체나 배열이 포함되어 있을 경우, 내부 객체나 배열은 참조 관계를 유지하게 됩니다. 얕은 복사는 배열의 slice() 메소드를 이용하여 구현할 수 있습니다. const arr1 = [1, 2, [3, 4]]; const arr2 = arr1.slice(); // 얕은 복사 console.log(arr1[2] === arr2[2]); // true 위의 코드에서 arr1 배열을 slice() 메소드를 이용하여 복사하였습니다. arr2는 arr1과 같은 배열이지만, 내부의 배열 [3, 4]는 참조 관계를 유지하..

TS) React ~ event type 찾는 방법 ... 예시

예제를 통해 살펴본다. (예제: React와 Typescript 이용 / react-beautiful-dnd 이용) ... function App() { const [toDos, setToDos] = useRecoilState(toDoState); const onDragEnd = (args) => { // args 의 타입 미지정 에러 console.log(args); }; return ( ... args의 타입을 알아야 한다. 하지만, onDragEnd에 대해 아는 정보가 없다. 아래와 같이 코드를 수정한다. ... function App() { const [toDos, setToDos] = useRecoilState(toDoState); const onDragEnd = (args) => { // ar..

React / Library) react-beautiful-dnd 설치 및 세팅

* 설치 yarn add react-beautiful-dnd yarn add @types/react-beautiful-dnd * 세팅 import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; // test array const toDos = ["a", "b", "c", "d", "e", "f", "g"]; function App() { // drag가 끝났을 때 실행할 함수 const onDragEnd = () => {}; return ( // DragDropContext ~ onDragEnd 필수 {/* Droppable ~ droppableId 필수 */} {/* Droppable에는 제공되는 props 존재-> chil..

Front-end/React 2023.03.07

HTML) Meta Tag ... OG(오픈그래프) 설정

카카오톡에 링크를 공유했을 때 나오는 미리보기를 Meta Tag 의 og 를 이용하여 설정할 수 있다. # 양식 https://example.com/page.html"> https://example.com/image.jpg"> * index.html 의 head 태그 안에 정의한다. 만약 설정했는데 카카오톡에서 미리보기가 제대로 나오지 않는 경우, https://developers.kakao.com/tool/debugger/sharing 위의 kakao developers의 공유 디버거에서 캐시 초기화를 하면 된다. 참고) - https://velog.io/@byeol4001/Meta-Tag-OG%EC%98%A4%ED%94%88%EA%B7%B8%EB%9E%98%ED%94%84-%EC%82%AC%EC%9A..

Front-end/HTML 2023.03.04

JS) not not 연산자 vs non-null assertion 연산자

not not 연산자와 non-null assertion 연산자는 모두 JavaScript와 TypeScript에서 사용되는 연산자 중 하나이지만, 다른 목적으로 사용됩니다. 1. not not(!!) 연산자 not not(!!) 연산자는 Boolean 값을 반환합니다. 이 연산자는 값을 불린값으로 변환할 때 사용됩니다. 이 연산자를 사용하면, 값이 존재하면 true를 반환하고, 값이 존재하지 않으면 false를 반환합니다. 예를 들어, 다음과 같이 사용할 수 있습니다. const myValue = 0; const myBoolean = !!myValue; // false not not(!!) 연산자는 값이 falsy한 값일 경우 false를 반환합니다. JavaScript에서는 다음과 같은 값을 fals..

JS) Promise를 반환하는 함수의 다양한 표현 (fetch, axios)

이번 예시는 React Query v4 의 useQuery라는 훅의 Option인 queryFn을 예시로 살펴본다. queyrFn는 promise를 반환하는 함수여야 한다. useQuery는 주로 데이터 fetching으로 사용하는데, 이를 위해 fetch 와 axios를 이용한 다양한 표현들을 알아보자. 각 api는 async/await 와 Promise chaining 을 사용하여 나타낼 수 있다. 참고로, axios와 fetch의 성능 차이는 크게 없으며, 아래 함수들의 return값은 모두 Promise{} 이다. axios와 fetch의 성능 차이는 크게 없다. 다만, axios가 가독성이 더 좋고 사용할 수 있는 기능이 많기 때문에 더 선호되는 경향이 있다. fetch는 웹 내장 함수이기 때문..

JS) then vs async/await ... (예시: fetch API)

fetch API에서 async/await과 then은 모두 비동기 코드를 작성하는 방법입니다. 각각의 사용 시기는 코드 구조 및 개발자 선호도에 따라 다를 수 있습니다. async/await를 사용한 비동기 작업 async/await는 비동기 코드를 작성할 때 사용됩니다. fetch API는 네트워크 요청이 비동기적으로 처리되기 때문에, async/await를 사용하여 코드를 동기적으로 작성할 수 있습니다. async function fetchData() { try { const response = await fetch('https://example.com/data.json'); const data = await response.json(); console.log(data); } catch (error..

JS) fetch VS axios (API 호출)

Fetch fetch는 ES6에서 도입된 네이티브 API로, 브라우저에서 제공됩니다. fetch는 Promise를 반환하며, 사용법은 다음과 같습니다. fetch(url) .then(response => { if (!response.ok) { throw new Error("HTTP error " + response.status); } return response.json(); }) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); Axios axios는 브라우저와 Node.js에서 모두 사용할 수 있는 라이브러리입니다. axios는 Promise를 반환하며, 사용법은 다음과 같습니다. axios.get(url..

React) Outlet, useOutletContext 기본 사용 방법 ... react-router-dom

1. Outlet Outlet은 정의한 Router에서 특정 path에 해당하는 경로에 children이 있을 때, 해당 컴포넌트를 렌더링하도록 해주는 컴포넌트이다. 반드시 부모 컴포넌트 내에서 정의해줘야 한다. 그래야 해당 컴포넌트의 자식 컴포넌트와 연결이 가능하기 때문이다. * Router.tsx (일부) { path: "/users/:userId", element: , children: [ { path: "followers", element: , }, ], }, # 앞에 "/" 를 붙이면 절대경로(맨 처음부터 시작), 붙이지 않으면 부모 path에서부터 시작하는 상대경로이다. * User.tsx (일부 ... Followers 컴포넌트의 부모 컴포넌트) See Followers! Link 컴포넌트를..

Front-end/React 2023.02.24