미니프로젝트 트러블 슈팅
👉 항해99 14기 미니프로젝트주차 6조
각 계절별 query string이 담긴 get Api를 4개 만들었다
// 봄
const getSpring = async () => {
const response = await axios.get('/api/boards?season=spring}')
return response.data.data
}
const { data: spring} = useQuery('spring', getSpring)
// 여름
const getSummer = async () => {
const response = await axios.get('/api/boards?season=summer}')
return response.data.data
}
const { data: summer} = useQuery('summer', getSummer)
// 가을
const getFall = async () => {
const response = await axios.get('/api/boards?season=fall}')
return response.data.data
}
const { data: fall} = useQuery('fall', getFall)
// 겨울
const getWinter = async () => {
const response = await axios.get('/api/boards?season=winter}')
return response.data.data
}
const { data: winter} = useQuery('spring', getWinter)
한 페이지에서 get 요청을 4번씩이나 보내서 비효율적이고, 반복되는 코드가 많다
useSearchParams
를 사용해서 query string으로 이루어진 현재 페이지의 value를 추출한다
🔎 Query String
localhost:3000/main?season=spring
key => season
value => spring
const [searchParams, setSearchParams] = useSearchParams()
useSearchParams을 사용해서 두 개의 함수를 반환시킨다
let season = searchParams.get('season')
season이라는 변수를 선언해서 query string 값을 가져오는 searchParams의 season(key)에 해당하는 value를 구한다
/api/boards?season=winter
변수 season = winter
const getBoard = async () => {
const response = await axios.get(`/api/boards?season=${season}`)
return response.data.data
}
const { data: board} = useQuery(['board', season], getBoard)
get Api를 하나로 줄이고 공통된 Api 중, 바뀌어야 하는 부분에 템플릿 리터럴로 변수 season을 넣어준다
useQuery
의 쿼리키가 바뀔 때마다 데이터를 받아와야 하기 때문에 불러낸 데이터인 board와 계절이 바뀌는(페이지가 이동하게 되는) season을 배열 형태로 넣어준다