애먹은 이유: 라이브러리는 잘 적용했지만, 그걸 프론트에서부터 시작해서 dateFormat()으로 형식전환하여 server로 보내는 일련의 과정 및 방식을 몰랐기 때문.
수정 방법 : node.js 에서든 , 프론트에서든 수정하려면 둘다 가능하다.
아래 링크에서 node.js로 간단히 수정가능하다. 내껀 프론트로 수정해보려 한다.
내 코드 상황.
1. 현재 지출, 비용 두가지 폼으로 db를 구성해 놓음. ㅡ> 각각 수정이 필요.
2. 폼으로 두 정보를 각각 받아서 node 서버를 통해, 날리고 있는 구조.
3. 날짜 관리 컴포넌트도 따로 만들어 둔 상황임.
결론. 날짜 관리 컴포넌트 점검 후, 보내는 form의 구조를 잘 살펴보면 됨.
우선 아시아/서울 기준으로 만들고 세팅.
import moment from "moment-timezone";
export const dateFormat = (date) => {
// 주어진 날짜를 서울 시간대로 변환하고, "YYYY/MM/DD" 형식으로 포맷팅
return moment.tz(date, "Asia/Seoul").format("YYYY-MM-DD");
};
윗 컴포넌트를 export 해와서 date 변수에 초기화 시켜서 비용을 추가시키는 상태변수에 집어 넣는다.
import { dateFormat } from "../../utils/dateFormat";
unction ExpenseForm() {
const { addExpense, error, setError } = useGlobalContext();
const [inputState, setInputState] = useState({
title: "",
amount: "",
date: "",
category: "",
description: "",
});
const { title, amount, date, category, description } = inputState;
const handleInput = (name) => (e) => {
setInputState({ ...inputState, [name]: e.target.value });
setError("");
};
const handleSubmit = (e) => {
e.preventDefault();
// Date 객체를 올바른 형식으로 변환
const formattedDate = date ? dateFormat(date) : "";
const payload = {
...inputState,
date: formattedDate, // 변환된 날짜 데이터를 payload에 포함
};
addExpense(payload); // 수정된 payload를 사용하여 서버에 전송
// 폼 제출 후 입력 상태 초기화
setInputState({
title: "",
amount: "",
date: "",
category: "",
description: "",
});
};
expenseForm 내용만 수정한 모습.
프론트에서 2/13일로 정보 입력.
income form은 아직 수정 전인 상태여서 날짜가 하루 늦게 나온다.
'Web App Project' 카테고리의 다른 글
땡그랑앱 설계 내용 흐름 (0) | 2024.02.20 |
---|---|
router의 react와 node.js에서의 쓰임새 정리 (0) | 2024.02.19 |
front, back, db의 전반적 상호작용 프로세스 정리 (0) | 2024.02.14 |
땡그랑 앱 2번째 전체 구현 (0) | 2024.02.12 |
1월 간 한 일. (0) | 2024.01.25 |