TIL

240426_TIL

화영강 2024. 4. 26. 18:17

1. 날짜 변경 : end 라는 날짜의 월을 +3으로 변경

end.setMonth(end.getMonth() + 4);

 
 
2. String(rows?.TARGET_SEX || 2) 이 코드에서 rows?.TARGET_SEX이 0인 경우 false로 받아들여져서 계속 2가 출력됐다. 그래서 rows?.TARGET_SEX를 문자열로 먼저 바꾸는 작업을 한 뒤 값이 있는지 없는지를 확인했다.

String(rows?.TARGET_SEX) || "2"

 
이렇게 하니까 가져온 데이터 값이 0일 경우에 그대로 0으로 출력된다.
그런데 rows?.TARGET_SEX 데이터가 없을 경우 그러니까 undefined일 경우 2가 나오는게 아니라 “undefined”로 되지 않나? 왜 데이터가 없을 때는 정상적으로 "2"로 나올까?
 
 
3. 수정 요청을 하면 200이 뜨는데 왜 디비에는 반영이 안됐다.
서버의 requestbody와 내가 보내는 데이터의 항목이 달랐다.. 항목이 다르면 200이 나오면 안되는거 아니냐고요
200이 떠도 정상적으로 작동하지 않았을 때는 내가 데이터를 잘못 보냈는지 확인하기
 
 
4. 리액트 쿼리의 queryClient.invalidateQueries()와 queryClient.refetchQueries()
queryClient.invalidateQueries() : 해당 쿼리 키의 캐시 무효화 -> 데이터를 "stale"로 간주 -> 이건 데이터를 가져오는 유즈쿼리에서 옵션으로 enabled를 true로 해줘야 컴포넌트가 렌더링 될 때 자동으로 데이터를 새로 고침해준다. 하지만 내가 사용하는 useQuery에서는 enabled를 false로 해줘야 했기 때문에 소용이 없음
queryClient.refetchQueries() : 해당 쿼리 키 리패치. 수정요청을 보낸 후 리스트를 불러오는 쿼리 키를 넣어줘서 리패치되도록.
 
 
5. 리액트쿼리와 리액트훅폼을 사용하는데 데이터를 수정하고 나서 다시 해당 데이터를 들어가면 input이 데이터가 변경되기 전으로 돌아가는 버그가 있었다. 난 처음에는 수정페이지에서 데이터를 불러오는 쿼리의 캐시 문제라고 생각해서 수정 후 캐시를 지우는 remove를 실행시켰다. 이렇게 하니까 정상적으로 수정된 데이터가 보이긴 했다.
작업을 하다가 폼 필드를 업데이트하는 reset 함수를 알게되었다. 새로 작성한 데이터를 reset으로 보내면 폼이 해당 데이터로 초기화된다. 
둘다 내가 원하는 방식으로 작동하기 때문에 뭘 사용해도 크게 상관이 없을 것 같았는데, remove를 사용하지않아도 데이터 패치로 들고 온 값은 변경된 데이터였기 캐시자체를 삭제할 필요가 없다고 생각해서 reset으로 수정된 데이터를 보이도록 했다.