๋ก๊ทธ์ธ, ํ์๊ฐ์
, todo Form ์์ฑ axios๋ก์ง๋ค์ ๋ชจ๋ ๋ถ๋ฆฌ๋ฅผ ํ์ง๋ง
todo title ๋ฐ์์ค๊ธฐ, todo detail ๋ฐ์์ค๊ธฐ ๋ก์ง๋ค์ UI ์ปดํฌ๋ํธ ๋ด์ ๊ฐ์ด ์์ฑํด์ฃผ์๋ค.
์ฒ์์๋ todo title, todo detail axios๋ก์ง๋ค๋ ๋ถ๋ฆฌ๋ฅผ ํด์ฃผ๋ ค๊ณ ํ๊ณ ์ฝ๋๋ ์์ฑํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ถ๋ฆฌํ ๋ก์ง์์ return๊ฐ์ ๋ฐ์์์ ์ฌ์ฉํ ์ปดํฌ๋ํธ์์ ์ฝ์์ ์ฐ์ด๋ณด๋ฉด Promise {<pending>}
๊ฐ์ด ์ฐํ๊ณ PromiseResult๊ฐ์ undefined๊ฐ ์ฐํ๋ ๊ฒ์ด๋ค.
์ด๋ ์์ฑํ ์ฝ๋ โฌ
// axios get ์์ฒญ (todo title)
const getTodo = async () => {
try {
await axios
.get('http://localhost:8080/todos', {
headers: {
Authorization: token,
},
})
.then((result) =>
console.log(result.data.data)
return result
);
} catch (error) {
console.log(error);
}
};
// TodoTitle ์ปดํฌ๋ํธ์์ get ์์ฒญ ๊ฒฐ๊ณผ ๋ฐ์์ค๊ธฐ
useEffect(() => {
token && console.log(getTodo());
}, [create, id]);
์ ์ด๋ฐ์ง ๋ชจ๋ฅด๊ฒ ๊ณ ๊ทธ๋์ ์ด๋ป๊ฒ ์์ ํด์ผ ํ๋์ง ๊ฐ๐๋ ์ ์์ ๊ตฌํ ๋น์์๋ ์ผ๋จ ๋์ด๊ฐ๋ค.
+ 10์ 2์ผ
ใ
ใ
ใ
๋น์ฐํ undefined๊ฐ ์ฐํ๊ฒ ์ง. return๊ฐ์ด ํ๋๋ ์๋๋ฐ๐ฉ
๊ทธ๋ฆฌ๊ณ async awiat์ ์ด์ฉํ axios์์ฒญ์ ๋ฐ์์์ผ๋๊น Promise๊ฐ ๋์ด์จ ๊ฑฐ์๊ณ . ๋ง๋๋ ๋น์์ ์ด๋ป๊ฒ ํด์ผ ํ์ง์ ์ง์คํด์ ๊ทธ๋ฐ๊ฐ ๋นจ๋ฆฌ ์บ์น๋ฅผ ๋ชปํ๋ค. ์ ๋ ๋ชป ์์ ๋ฏ.
์์ฒญ์ ๋ณด๋ด๋ฉด์ then์ผ๋ก ๊ฒฐ๊ด๊ฐ์ ๋ฐ์์ค๊ธฐ ๋๋ฌธ์, ๋ก์ง์ ์์ฑํ ์ปดํฌ๋ํธ์ชฝ์์๋ ๊ฒฐ๊ด๊ฐ์ด ์ฝ์์ ์ ์ฐํ๋๋ฐ, ์ด๊ฒ TodoTitle์ปดํฌ๋ํธ์์ ์ฝ์์ ์ฐ์ผ๋ฉด Promise {<pending>}
๊ฐ์ด ์ฐํ๋ค.
์ ๊ทธ๋ฐ์ง๋ ๋ชจ๋ฅด๊ฒ ์ด์ ์์ฒญ์ ๋ณด๋ด๋ ์ชฝ์์๋ ์์ฒญ๋ง ๋ณด๋ด๊ณ ์ปดํฌ๋ํธ์์ ๊ฒฐ๊ด๊ฐ์ ๋ฐ์์ค๋ ๋ฐฉ์์ผ๋ก ์ผ๋จ ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ดค๋ค.
// ์์ ํ axios get ์์ฒญ (todo title)
const getTodo = async () => {
try {
const result = await axios
.get('http://localhost:8080/todos', {
headers: {
Authorization: token,
},
})
return result
} catch (error) {
console.log(error);
}
};
// ์์ ํ TodoTitle ์ปดํฌ๋ํธ์์ get ์์ฒญ ๊ฒฐ๊ณผ ๋ฐ์์ค๊ธฐ
useEffect(() => {
const newData = getTodo().then((result) => {
return result;
});
console.log(newData);
token && setDatas(newData);
}, [create, id]);
์ด๋ ๊ฒ ํ๋๋ Promise {<pending>}
๊ฐ์ด ์ฐํ๊ธด ํ์ง๋ง PromiseResult๊ฐ์๋ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ค์ด์๋ค!
+ 10์ 2์ผ
๊ทธ๋ ์ง.. ์ฌ๊ธฐ์๋ result ๋ณ์์ axios์์ฒญ ๊ฐ์ ๋ฃ๊ณ return์ ํด์ฃผ๊ณ ์์ผ๋๊น Promise๊ฐ ๋์ด์ค๋ฉด์ ์์ฒญ๋ฐ์ ๊ฐ์ ๋๊ฒจ๋ฐ์ ๊ฑฐ์ง
์ด ๊ฒฐ๊ณผ ๊ฐ์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์๊น. ์ฌ๊ธฐ์๋ถํฐ ๋ ์ด๋ ต๋ค.
์ฒ์์๋ ๊ทธ๋ฅ ์์ ์ฒจ๋ถํ ์ฝ๋๋๋ก ์์ ํ๋ฉด ๊ฐ์ ์ฌ์ฉํ ์ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์๋์๋ค.
์คํ์ค๋ฒํ๋ก์ฐ, ๊ฐ์ธ ๋ธ๋ก๊ทธ ๊ธ๋ค์ ๋ค ๋ค์ง๋ฉฐ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด์ async await์ Promise๋ฅผ ๋ฐํํ๊ณ , then์ ํด์ ๊ฒฐ๊ด๊ฐ์ ๋ฐ์ ์ ์๋ค๋ ๊ธ์ ๋ง์ด ๋ดค๋ค.
๋ชจ๋ฅด๋ ๋ด์ฉ์ ์๋๋ฐ ๊ทธ๋์ ์ด๋ป๊ฒ ํ์ฉํ๋๊ณ ๊ฐ ๋ฌธ์ ์๋ค.
๊ณ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก TodoTitle
์ปดํฌ๋ํธ์์ getTodoํจ์
์ ๊ฒฐ๊ด๊ฐ์ ์ฝ์๋ก ์ฐ์ด๋ณด์๋ค.
useEffect(() => {
const newData = getTodo().then((result) => {
console.log(result); // โ
์ด ์ฝ๋ ์ถ๊ฐ
return result;
});
console.log(newData);
token && setDatas(newData);
}, [create, id]);
์ฝ๋๋ฅผ ์ ๊ธฐ์ ์ถ๊ฐํ๋๋ ์ฝ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฐํ๋ค!
.then
ํจ์ ์์์ ๋ฐ๋ก ์ฝ์์ ์ฐ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์์ ์ง๋๋ฐ ์ return ๊ฐ์ผ๋ก newData
๋ณ์์ ํ ๋นํ ํ newData
๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด Promise<pending>
๊ฐ์ด ๋์ค๋ ๊ฒ์ผ๊น. ์ญ์๋ async await
์ Promise๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ผ๊น? (๊ณต๋ถ๊ฐ ํ์ํ ๋ถ๋ถ ์ฐพ์๋ค๐ก)
๊ทธ๋์ getTodoํจ์์ .then()
์์์ ๋ฐ๋ก setDatas๋ก datas state๋ฅผ ์
๋ฐ์ดํธํด์คฌ๊ณ , ๋ฐ์ฒ๋ผ ์ฝ๋๋ฅผ ์์ ํ๋ค.
// TodoTitle ์ปดํฌ๋ํธ
useEffect(() => {
token &&
getTodo().then((result) => {
setDatas(result.data.data);
});
}, [create, id]);
๊ฐ์ ๋ฐฉ์์ผ๋ก todo detail์ ๋ฐ์์ค๋ axios ์์ฒญ ๋ก์ง๋ ๋ถ๋ฆฌํ๋ค. :)
์ข ๋ ๊น๋ํ๊ณ ์ฐ์ํ(๐ฆข??) ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ์๋ฐ, ๋ ํ๋ํ๋ ๋ฆฌํฉํ ๋ง ํ๋ฉด์ ๊ณ ๋ฏผํด๋ด์ผ๊ฒ ๋ค.