๋ฒ์จ 3์ฃผ์ฐจ๊ฐ ๋์๋ค. ์๊ฐ์ด ์ ์ด๋ ๊ฒ ๋น ๋ฅธ์ง..๐ฅฒ
์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ๋ ์นด์นด์ค ์์
๋ก๊ทธ์ธ ๋ฌธ์ ๋ ํด๊ฒฐ๋์ ๋ง์ ํธํ๊ฒ ๊ฐ๋ฐ์ ํ๋ค.
ํ์ง๋ง ์๋ก์ด ๋๊ด์ด ๋ฐ์ํ๋ค. (์์ธํ ์ฌํญ์ ์๋์์)
์ด๋ฒ ์ฃผ๋ ์ ๋ฒ์ฃผ ๋ณด๋ค ๊ธฐ์ ์ ๋ถ์ฑ๊ฐ ์ค์์ง๋ง ์๋ฒฝํ๊ฒ ์ค์ด๊ธฐ๋ ํ๋ ๊ฒ ๊ฐ๋ค..
ํ์ง๋ง ๋ ๋
ธ๋ ฅํด์ ์ต๋ํ์ผ๋ก ์ค์ด๋๋ก ๋
ธ๋ ฅํ ๊ฒ์ด๋ค.
์์
๋ก๊ทธ์ธ์ ํด๊ฒฐํ๋ค.
๋ก๊ทธ์ธ์ด ๋์ง ์๋ ๋ฌธ์ ๋, Redirect URI์ Redirect ID๊ฐ ๋ค๋ฅธ๊ฒ ๋ฟ๋ง์ด ์๋๋ผ
email์ ํ์ ๋์๋ก ๋ฐ์ง ์์ ์๊ธด ๋ฌธ์ ์๋ค.
์ด ๊ณผ์ ์ ํด๊ฒฐํ๋ฉด์ ์์
๋ก๊ทธ์ธ์ ๋ํด ๋ง์ด ๋ฐฐ์ฐ๊ฒ ๋์๋ค.
๋ค์ ์ผ์ ์ธ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ์กฐ๊ธ ๋ ์์ํ๊ฒ ์งํํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฒ์ ํํฐ๋ง ๊ธฐ๋ฅ๋ ๊ตฌํ์ ์๋ฃ ํ๋ค.
์ต์์ ์ปดํฌ๋ํธ์ 2๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํ๋๋ก ๊ตฌ์ฑํ์์๋๋ฐ, ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋จผ์ PostCard ํ์ ์ปดํฌ๋ํธ ์์ fetch๋ก ๊ฒ์๊ธ์ ๋ฐ์์ ๋ฟ๋ฆฌ๋๋ก ํ๋๋ฐ, ์ด ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ํ์ด์ง์์๋ ์ฌ์ฉ๋๊ณ ์์๋ค.
์ด๋ ๊ฒ ๊ตฌ์ฑ์ ํด์ ๋น์ฐํ search ์ปดํฌ๋ํธ์์ postCard๋ก ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ ๋ฌ์ด ์๋ ์ ๋ฐ์ ์์๋ค.
๊ทธ๋ฆฌ๊ณ PostCard ์ปดํฌ๋ํธ ์์์ 2๊ฐ์ fetch๋ฅผ ๋ฐ๊ณ ์์ด ์ ์ ๋ฌด๊ฑฐ์ ์ง ๋ฟ๋๋ฌ, ์ปดํฌ๋ํธ์ ์ญํ ์ด ์ ํํ ๋ช
์๋์ด ์์ง ์๊ณ ๋ง ์ฌ์ฉ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ ์ ํด์ผํ ๋ถ๋ถ์ด์๋ค.
์ด ๋ถ๋ถ์ ์์ ํ ๋, ์ฌ๋ฌ๊ฐ์ง ๊ตฌ์์ ํ์์๋ค.
์ฒซ๋ฒ์งธ๋ search ์ปดํฌ๋ํธ๋ ์ด์ฐจํผ main์์๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ถ๋ฆฌํ ํ์๊ฐ ์์ผ๋, ํ๋๋ก ํฉ์น ๋ค postcard์ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ์ ํด๋ดค๋ค.
์๋์ ์ ๋์์ง๋ง main ์ปดํฌ๋ํธ์ ๊ธธ์ด๊ฐ ๋๋ฌด ๊ธธ์ด์ ธ ๊ฐ๋
์ฑ์ด ๋จ์ด์ ธ ๊ฒฐ๊ตญ ๋ค์ ๋ถ๋ฆฌํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
search ์ปดํฌ๋ํธ๋ฅผ ์๋ก ๋ง๋ค์ด์ main์ผ๋ก ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๋๊ฒผ๋ค.
// search
const handleSearch = () => {
const query = {
area: selectedArea,
period: selectedPeriod,
price: selectedDeposit,
gender: selectedGender,
}
onSearch?.(query)
}
// main
const handleSearch = async (query: SearchQuery, page = 1, size = 5) => {
const searchParams = {
page: page.toString(),
size: size.toString(),
region: query.area,
period: query.period,
price: query.price?.toString() ?? "",
gender: query.gender.toString(),
}
const queryString = new URLSearchParams(searchParams).toString()
try {
const response = await fetch(`/api/articles/filter?${queryString}`, {
method: "GET",
headers: new Headers({
"ngrok-skip-browser-warning": "69420",
}),
})
if (!response.ok) {
throw new Error("์๋ฒ ์ฐ๊ฒฐ ์คํจ")
}
const data = await response.json()
if (data.code === "RESPONSE_SUCCESS" && data.status === "OK") {
handleSearchResults(data.data)
setSearchBoxOpen(!searchBoxOpen)
} else {
throw new Error("API Error: " + data.msg)
}
} catch (error: unknown) {
console.error("์๋ฌ", searchParams)
setSearchBoxOpen(!searchBoxOpen)
messageApi.error("๊ฒ์ ์ค๋ฅ" + error)
}
}
์ด๋ ๊ฒ ์์ ์ ๋ง์น๊ณ ๋ ๋ค ์ ์์ ์ผ๋ก ์๋์ด ์ ๋๋ ๊ฒ์ ํ์ธํ๋ค.
์ต์ข
์ ์ผ๋ก
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ์ง๊ธ๊ณผ ์ ์ฒด๊ธ ๋ฒํผ์ ํ ๊ธํ ์, ๋ชจ์ง ์ํ์ธ์ง ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋ก ํธ์์ ํํฐ๋ง์ ํ์๋๋ฐ,
ํ์ด์ง๋ค์ด์
์์ ๋ณด๊ณ ์๋ ํ์ด์ง๋ง ํํฐ๋ง์ด ๋๊ณ ์๋ ๋ฌธ์ ๋ฅผ ํ์ธํ๋ค.
๊ฒฐ๊ตญ ๋ฐฑ์๋์์ ๋ชจ์ง๊ธ API๋ฅผ ๋ฐ์์ ๋ฒํผ ํ ๊ธ ์ boolean ํํ๋ก fetch ๋ถ๋ถ์ ์ ์ฉ ํ๋ค.
// ๋ชจ์ง๊ธ, ์ ์ฒด๊ธ ํ ๊ธ
const toggleRecruitOnly = () => {
setShowRecruiting(!showRecruiting)
}
useEffect(() => {
// ๋ชจ์ง๊ธ, ์ ์ฒด๊ธ
const fetchData = async () => {
try {
const response = await fetch(
`/api/${userArticle}?page=${currentPage}&size=9&isRecruiting=${showRecruiting}`,
{
method: "GET",
headers: new Headers({
"ngrok-skip-browser-warning": "69420",
}),
},
)
// ์ ์ฒด ๊ฒ์๊ธ ๊ฐ์
const countResponse = await fetch(`/api/${userArticle}/total`, {
method: "GET",
headers: new Headers({
"ngrok-skip-browser-warning": "69420",
}),
})
if (!response.ok || !countResponse.ok) {
throw new Error(`์๋ฒ ์ํ ์๋ต ${response.status}`)
}
const data = await response.json()
const countData = await countResponse.json()
setPosts(data.data)
setCount(countData.data)
} catch (error) {
console.error(error)
messageApi.error("๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ์ค๋ฅ")
}
}
fetchData()
}, [currentPage, showRecruiting, messageApi])
Try
โก๏ธย PostCard ์ปดํฌ๋ํธ์์ fetch๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ ์๊ธด ๋ฌธ์ ์์ ์ธ์งํ๊ณ , ์ต์์ ์ปดํฌ๋ํธ์์ fetch๋ฅผ ์ฌ์ฉํ๊ณ searchBar์ PostCard๋ก props ์ ๋ฌsolve
โก๏ธย ์ ์์ ์ผ๋ก ๊ฒ์ ํํฐ๋ง ์๋๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ๋ค์ ์๊ฐ์ด ๊ฑธ๋ ธ์ง๋ง, ๊ทธ ์๊ฐ๋์ ์ฑ์ฅํด์ ์ผ๊น?
์ ์ ์ง๋์ ์ฝ๋๋ฅผ ๋ณด๋ ๋ฌด์จ ์๊ฐ์ผ๋ก ์ ๋ ๊ฒ ์งฐ๋์ง ์๋ฌธ๋ง ๋ค์๋ค.
๊ฐ๋ฐ์ ์์ํ๊ธฐ ์ ์ ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง, ์ด๋ค ํ์์ผ๋ก ์๋ํ ๊ฒ์ธ์ง ์ ๊ตฌ์ํ ๊ฐ๋ฐ์ ํด์ผํ๋ค๋ ๊ฒ์ ๋ผ์ ๋ฆฌ๊ฒ ๋๊ผ๋ค.
์์ผ๋ก๋ ๊ผญ ์ ์คํ ์๊ฐํ๊ณ ๊ฐ๋ฐ์ ํด์ผ๊ฒ ๋ค.