npm create vite@latest my-react-app -- --template react
이렇게 생성하게 되면 my-react-app 부분에 생성할 폴더 이름을 지정해주면
바로 react 프로젝트가 생성되고
npm create vite
제시된 순서대로 셋팅 하는데 projectname을 정하는 부분에
.를 작성해주면 폴더를 따로 생성하지 않고 넘어가게 된다
그 후 원하는 프로젝트의 구성을 정해서 프로젝트를 생성하면 된다.
프로젝트 완성한 다음에 npm install을 해주면 된다.
Vite는 특히 대규모 애플리케이션에서 개발 서버 시작 시간과 HMR 성능이 크게 향상되어, 개발자 경험을 크게 개선합니다.
코드 품질과 일관성을 유지하기 위한 중요한 설정 파일.
eslint.config.js는 ESLint의 새로운 플랫 구성 파일로,
코드 분석 규칙을 정의하고 관리합니다.
eslint.config.js는 React 19에서 더욱 중요해진 플랫 설정 방식으로,
기존의 .eslintrc 파일을 대체하며 더 명확하고 유연한 설정이 가능
1. 코드 오류를 자동으로 감지
2. 코드 스타일을 일관되게 유지
3. 잠재적 문제를 사전에 발견
4. 개발자 간 코드 작성 규칙 통일
코드 포맷팅을 위한 설정
ESLint가 코드 품질과 오류를 검사한다면,
Prettier는 코드의 스타일과 포맷을 일관되게 유지하는 데 중점
npm install --save-dev eslint-plugin-prettier prettier eslint-config-prettier
- eslint-plugin-prettier`와 관련된 다른 필요한 패키지들을 설치통합 플러그인이 충돌 없이 사용 가능하게 해줌
.jsx 파일은 React 컴포넌트와 UI 요소를 포함함을 즉시 알 수 있습니다.js 파일은 일반 JavaScript 로직, 유틸리티 함수, 서비스 등을 담당합니다리액트에서 객체나 배열을 다룰 때는 기존 객체를 직접 수정하지 않고, 새로운 객체를 만들어서 상태를 업데이트해야함.
const [user, setUser] = useState({ name: '홍길동', age: 30 });
// 나이만 1살 증가시키고 싶을 때
setUser({ ...user, age: user.age + 1 });
setUser로 상태를 바꾸려면 새로운 객체를 만들어야한다.
...user로 기존 속성을 복사한 후 age만 바꾼 새 객체를 만듬
이렇게 해야 React가 상태가 바뀐 걸 감지하고 컴포넌트를 리렌더링 해준다..
setUser((prevUser) => ({ ...prevUser, age: prevUser.age + 1 }));
setUser((prevUser) => ({ ...prevUser, age: prevUser.age + 1 }));
setState는 비동기적으로 작동해서, 여러 번 연속 호출하면 예기치 않은 결과가 생길 수 있음. 위 구문에서 업데이터 함수를 사용하지 않는다면 한번만 증가되는데 업데이트 함수를 사용한다면 두번 증가된다.
useState는 비동기적으로 작동하기 때문에, 같은 렌더링 사이클 내에서 setState를 여러 번 호출하면 이전 상태 값이 꼬일 수 있어서 훨씬 안전하고 좋은 경우가 많다.
const array = [5, 12, 8, 130, 44];
console.log(array.at(2)); // 8
console.log(array.at(-1)); // 44 (마지막 요소)
컴포넌트 작성 시 함수 선언식보다 함수 표현식을 선호하는 주된 이유가 호이스팅 방지인지
// 함수 선언식 - 호이스팅됨
function MyComponent() { /*...*/ }
// 함수 표현식 - 호이스팅되지 않음
const MyComponent = () => { /*...*/ };
호이스팅 방지는 중요한 이유 중 하나지만, 그것만이 전부는 아닙니다. 함수 표현식은 전반적으로 현대 React 개발 방식에 더 잘 맞는 여러 장점이 있습니다.
React에서 리스트를 렌더링할 때 key는 요소의 고유성을 식별하기 위해 사용되는데 key에 배열의 index를 사용하는 건 권장되지 않는다
1.항목을 고유하게 식별할 수 있는 값
2.항목의 id가 있다면 id를 쓰는게 좋음

여태껏 사용할 색깔과 gap 같은 걸 root에 정해놓고 써본적이 없는데 이번에 강사님이 이런식으로 하길래 앞으론 이런식으로 사용할 것 같다. 프로젝트 전체에서 같은 색상이나 간격, 폰트 등을 한 곳에서 통일시킬 수 있다.
:root {
--blue-dark: #1e6f9f;
--blue: #4ea8de;
--purple-dart: #5e60ce;
--purple: #8284fa;
--gray-700: #0d0d0d;
--gray-600: #1a1a1a;
--gray-500: #262626;
--gray-400: #333333;
--gray-300: #808080;
--gray-200: #d9d9d9;
--gray-100: #f2f2f2;
--dange: #e25858;
--gap1: 8px;
--gap2: 16px;
--gap3: 32px;
line-height: 1.4;
color: var(--gray-100);
}
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
'blue-dark': '#1e6f9f',
blue: '#4ea8de',
'purple-dark': '#5e60ce',
purple: '#8284fa',
gray: {
700: '#0d0d0d',
600: '#1a1a1a',
500: '#262626',
400: '#333333',
300: '#808080',
200: '#d9d9d9',
100: '#f2f2f2',
},
danger: '#e25858',
},
spacing: {
gap1: '8px',
gap2: '16px',
gap3: '32px',
},
},
},
}