강의 막 끝내고 개인 과제 첫 진행 중...
개인 지출 관리 애플리케이션
각 월별로 지출 내역을 추가, 조회, 수정, 삭제할 수 있으며, 월별 총 지출과 항목별 지출 비율을 시각적으로 확인할 수 있습니다-(선택사항) 로컬 스토리지를 활용하여 사용자가 마지막으로 작업하던 월을 기억...
먼저 필수 사항부터...
선택 사항까지 처음부터 구현하는 건 성격에 안 맞음 🦕
알고 있는 게 하나!! 😌
이걸 지나면 또 조금은 성장할까? 아니면 이제 대신 다른 걸 JS 까먹어서 플러스마이너스제로가 되는 게 아닌가 걱정이다. 🤣
세팅할 게 너무 많아서 앞으로도 한참은 헷갈릴 것 같아 미래의 나를 위해 정리해놓는다.... MAC + yarn + VS code 씀
터미널 열자...
폴더 만들기
0-1. mkdir 원하는폴더명 으로 폴더 만들기 mkdir이 처음엔 뭐야 싶지만 make a directory의 약어로 추정...
만약, 폴더 미리 만들어놨으면 터미널에서 cd 폴더명으로 쳐서 위치 잡기
리액트 프로젝트 생성
yarn create vite 프로젝트이름폴더 --template react
cd 프로젝트이름폴더
yarn
이렇게 하면 보통 원하는폴더명 -> 프로젝트이름폴더 -> 리액트 플젝 와르르
나는 이렇게 정리하는 게 좋아서 하는데 혹시 아닐 경우에는 폴더 생성 잘 보고 하길 바람... (*깃&깃헙을 알지도 못한다 하면 그냥 바탕화면에 만드는 거 추천. 타고타고타고 들어가면 헷갈려서 이게 왜 이래 🙃 소리 나온다... )
( yarn은 미리 설치해야 내가 편해서 한다. 터미널 열고 해도 됨 )
code .
하면 알아서 오픈된다.
그러니까 리액트 프로젝트 다 만들고 나면,
cd 프로젝트이름폴더 -> yarn -> code . 으로 한 번에 설치 + 열기 추천한다. (yarn 은 이후에 깔아도 되지만 미리 셋업 추천함)
yarn add react-router-dom
4-1. src 폴더 아래에 pages, share 폴더 만들기
4-2. pages 폴더 안에 대충 페이지 파일 추가 (난 일단 home.jsx만 만든다. 필요하면 이후에 추가하는 거는 문제 없다. export 하기 스니펫 쓰셈)
4-3. share 폴더 안에 Router.jsx 파일 추가
import Home from "../pages/Home";
import { BrowserRouter, Routes, Route } from "react-router-dom";
const Router = () => {
return (
<>
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
</Routes>
</BrowserRouter>
</>
);
};
export default Router;
이렇게 셋업. BrowserRouter랑 Routes는 따로 jsx 파일을 안 만들어도 된다. 그런데, route를 쓰기 위해서는 저 둘을 감싸는 게 필요하다. 그냥 두 개로 래핑해줘야 함.
난 여기서 전체 레이아웃을 사이에 끼워넣는 거 선호한다.
Layout.jsx 파일
function Layout({children) {
return (
<div>
<div>{children}</div>
</div>
);
}
5-1. Router.jsx에 레이아웃 파일 끼워넣는다. import 잊지 말기(오토 스니펫 사용하는 거 추천)
Router.jsx 파일
<>
<BrowserRouter>
<Layout>
<Routes>
<Route path="/" element={<Home />} />
</Routes>
</Layout>
</BrowserRouter>
</>
yarn add styled-components
사용하는 해당 파일에 임포트하면 된다. 나는 지금 안 사용하니까 임포트는 안 했다~~
import styled from 'styled-components';
App.jsx파일
import Router from "./shard/Router";
function App() {
return (
<>
<Router />
</>
);
}
export default App;
여기서 중요한 거는 Router 연결할 때 form의 위치다.... 그냥 {} 이걸로 들고왔다가 안 된 경험이 있다! 오토로 연결할 때도 주의~
gitub 가서 레포지토리 생성하기. 초록색 <>code 버튼에서 http url 복사
vs code 터미널 열기. 내가 지금 있는 폴더 위치 정확한지 확인. (code .으로 들어왔으면 안 확인해도 된다. 이후 다시 폴더 열 때만 확인하면 됨)
git init
하면 이제 옆에 (git) 예쁘게 떠있음.
git remote add origin url붙여넣기
8-1. 연결됐는지 확인하기
git remote -v
자기 레포지토리 주소 나오면 된다.
8-2. 브랜치 생성 및 이동
그냥 냅다 메인에 올리지 말자. 그래도 되긴 하는데 브랜치 만들어서 올리면 좋다~
git switch -c 브랜치이름
만들어짐과 동시에 브랜치로 이동했을 것이다. (main) -> (브랜치이름) 으로 바뀌었을 거임
8-3. 초기 버전 푸쉬하기
git add .
git commit -m "하고싶은말"
git push origin 브랜치이름
초기 세팅 끝~!
이제 코딩 시작하기...ㅎㅎ
text: 일반적인 텍스트 입력 필드
password: 비밀번호 입력 필드 (입력 값이 마스킹됨)
email: 이메일 주소 입력 필드
number: 숫자 입력 필드
tel: 전화번호 입력 필드
url: URL 입력 필드
date: 날짜 선택 필드
time: 시간 선택 필드
datetime-local: 날짜와 시간을 함께 선택하는 필드
month: 월 선택 필드
week: 주 선택 필드
color: 색상 선택 필드
file: 파일 선택 필드
checkbox: 체크박스
radio: 라디오 버튼
range: 범위 선택 필드 (슬라이더)
submit: 폼 전송 버튼
reset: 폼 초기화 버튼
찾아봐야지 찾아봐야지 하다가 결국 오늘까지 왔군... 🙃
특정 문자 제거하기
문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
나의 문제 풀이
function solution(my_string, letter) {
let answer =[];
let nextMyStr = my_string.split('');
for (let i=0; i<nextMyStr.length; i++) {
if (nextMyStr[i] !== letter) {
answer.push(nextMyStr[i])
}
}
return answer.join('');
}
split으로 나누고 -> 그걸 for 반복문을 돌려 letter랑 또 비교했는데 다른 사람의 문제 풀이 보니까 그럴 필요가 없었다!!!
(nextMyStr.length에 - letter.length 해도 됐겠다. 이 경우에는 한 글자라 소용이 없었겠지만~)
을 계속 사용하고 싶다면...
나의 문제 풀이의 경우 split 사용법을 제대로 몰랐기 때문에 for문까지 돌렸던 것.
split();
split(separator);
split(separator, limit);
separator
원본 문자열을 끊어야 할 부분을 나타내는 문자열을 나타냅니다. 문자열 유형의 separator가 두 글자 이상일 경우 그 부분 문자열 전체가 일치해야 끊어집니다. separator가 생략되거나 str에 등장하지 않을 경우, 반환되는 배열은 원본 문자열을 유일한 원소로 가집니다. separator가 빈 문자열일 경우 str의 각각의 문자가 배열의 원소 하나씩으로 변환됩니다.
문자열에서
separator가 등장하면 해당 부분은 삭제되고 남은 문자열이 배열로 반환됩니다.
=> 즉, 구분자(separator) 자체는 결과 배열에 포함되지 않는다.
function solution(my_string, letter) {
const answer = my_string.split(letter).join('')
return answer;
}
근데 이것보다 더 쉬운 방법이 있다.
replaceAll(pattern, replacement)
MDN 문서에 정규표현식이 너무 많다... 👀
쉽게 말하면 pattern -> replacement로 대체한다.
function solution(my_string, letter) {
return my_string.replaceAll(letter, '');
}
이것도 역시 한 줄로 끝~! 도약반에서 MDN 문서보기에 익숙해지는 게 목표라고 말씀하셨는데, 조금정도는 익숙해진 듯 하다. 좋다~~