일단 게시글 수정을 눌렀을때 db에 올라간 달력 날짜와 시간이 datepicker
에 들어와야된다
datepick
의 공식문서를 찾아서 defaultValue
값을 찾아보았다.datepick 공식문서
AntCalendarEdit.tsx
로 먼저 불러왔다. // db 날짜 가져오기
const { state } = useLocation();
RsvDate_Posting의 콘솔로그 state
의 값 가공된 값을 볼수있다.
가공된 값을 다시 쪼개서 datePicker defaultValue
에 넣어줘야된다.
// db에 가공된 약속 날짜를 달력 defaulValue를 넣어주기 위한 코드
const year = state.TimeStamp_Posting.slice(0, 4);
// console.log(year);
const postingDate = state.RsvDate_Posting.split('/');
// console.log(postingDate);
const month = postingDate[0];
// console.log(month);
const day = postingDate[1].split(' ')[0];
// console.log(day);
const PreviousDate = `${year}/${month}/${day}`;
console.log(dayjs(PreviousDate));
6.defaultValue={dayjs(PreviousDate)}
식으로 넣어주면 캡쳐본처럼 잘들어온다.
return (
<ConfigProvider locale={locale}>
<Space direction='vertical'>
<DatePicker
onChange={onChange}
inputReadOnly={true}
format={format}
// placeholder='날짜를 입력해주세요.'
defaultValue={dayjs(PreviousDate)}
style={{ width: 250, height: 40, fontSize: 20 }}
allowClear={false}
placement='bottomRight'
bordered={false}
/>
</Space>
</ConfigProvider>
);
};
ReserveEditDate
키값이 meetEditDate
에 들어와서 쭉쭉 가공되는 코드를 거친다.const [meetEditDate, setMeetEditDate] = useRecoilState(ReserveEditDate);
const date = (y: number, m: number, d: number) => {
const D = new Date(y, m, d);
switch (D.getDay()) {
case 0:
return '(일)';
case 1:
return '(월)';
case 2:
return '(화)';
case 3:
return `(수)`;
case 4:
return `(목)`;
case 5:
return '(금)';
case 6:
return `(토)`;
default:
return '';
}
};
const y = meetEditDate.$y;
const m = meetEditDate.$M;
const d = meetEditDate.$D;
const month = meetEditDate.$M + 1;
const RsvDate_Posting = `${month}/${d} ${date(y, m, d)}`; //----> NaN/undefined값이 찍힌다.
const GetPreviousMeetDate = () => {meetEditDate.length < 14 ---> NaN/undefined typeof해보니 string이였고 꼼수를 부렸다.
14보다 작으면 즉 NaN/undefined이면 기존의 db 가공된 날짜를state.RsvDate_Posting
을setMeetEditDate
넣어준다.
그 값이 다시 가공이 또 되어서 자꾸 NaN/undefined 뜨는것이 아닐까하는 생각하게 되었다.
? setMeetEditDate(state.RsvDate_Posting)
: setMeetEditDate(RsvDate_Posting);
};
// console.log(state.RsvDate_Posting);
const GetPreviousMeetTime = () => {
meetTimeEdit.length < 9
? setMeetTimeEdit(state.RsvHour_Posting)
: setMeetTimeEdit(RsvHour_Posting);
};
// NaN/undefined가 뜬 이유다.
console.log(state.RsvHour_Posting);
useEffect(() => {
GetPreviousMeetDate();
GetPreviousMeetTime();
}, [meetEditDate, meetTimeEdit]);
datepick
에서 클릭하지 않았을 때는 빈값이 들어와야 되는데 db에 올라간 값이 들어오는 이상한 현상이 일어났다. 아무리 찾아도 들어올 수 없는 구조인데 참 이상했다.수정하기 페이지를 들어오면 수정하기 전의 초기값 날짜가 있어야된다.
근데 들어오자마자 초기 값의 날짜가 빈 문자열
이었다. 그래서 datepick에 defaultValue
에 넣어준 값을 이용해야 됐다.
PreviousDate
이 실행될때 dayjs(PreviousDate)
을 setReserveEditDate
에 넣어준다.
여기서 dayjs(PreviousDate)
가공되기 전의 ymd
값이다.
const [reserveEditDate, setReserveEditDate] = useRecoilState<any>(ReserveEditDate)
이 코드문으로 올라가서ReserveEditDate
에 가공되지 않은 값이 들어간다.(db의값이)
그래서 postEditpage.tsx에서 쭉쭉 가공되서 db에 이미 올라간 값이 재 업로드가 된다.
// AntCalendarEdit.tsx
useEffect(() => {
if (PreviousDate) {
setReserveEditDate(dayjs(PreviousDate));
}
}, [PreviousDate]);
// AntCalendarEdit.tsx
const onChange: DatePickerProps['onChange'] = (date, dateString) => {
setReserveEditDate(date);
};
setReserveEditDate
들어가고 const [reserveEditDate, setReserveEditDate] = useRecoilState<any>(ReserveEditDate) ReserverEditDate
에 들어간다.아톰
을 이용해서 postEditpage.tsx
에서 쭉쭉 가공되서 db에 새로운 날짜가 재 업로드가 된다.