Intro
์๋ ํ์ธ์. ์ด๋ฒ ์๊ฐ์๋ React์์ ๊ธฐ์กด ๋ฐ์ดํฐ์์ ๋๋ณด๊ธฐ ๋ฒํผ ํด๋ฆญ ํ ์๋ก ๋ถ๋ฌ์จ ๋ฐ์ดํฐ ํฉ์น๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๊ณต์ง์ฌํญ ๋ชฉ๋ก ์กฐํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋์ค ๋ฆฌ์คํธ๊ฐ ๋ง์์ง ์ ์์ ๊ฒ ๊ฐ์ ๋๋ณด๊ธฐ ๋ฒํผ UI๋ฅผ ์ถ๊ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฐธ๊ณ ๋ก API๋ ์คํ๋ง๋ถํธ์ Pageable ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ฆ ๊ธฐ์กด ๋ฐ์ดํฐ์์ ๋๋ณด๊ธฐ ๋ฒํผ UI๋ฅผ ํด๋ฆญํ ๋๋ง๋ค page ๊ฐ +1 ์ฉ ์ฆ๊ฐํ๋ฉด์ ์๋ก ๋ถ๋ฌ์จ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ค์ผ ํ์ต๋๋ค.
How to implement
์๋์ ๊ฐ์ด NoticeList ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. fetchNotice๋ผ๋ ํจ์๋ฅผ ๋ถ๋ฌ์ฌ ๋๋ง๋ค, ๊ธฐ์กด ๋ฐ์ดํฐ์ ์๋ก ๋ถ๋ ค์ง ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ค์ผ ํฉ๋๋ค. ํ์ง๋ง ์ ์ฝ๋์์๋ ์๋ก ๋ถ๋ ค์ง ๋ฐ์ดํฐ๋ง์ setNoticeList๋ฅผ ํตํด ์ ์ฅํด์ฃผ๊ณ ์์ต๋๋ค.
function NoticeList() {
const [noticeList, setNoticeList] = useState([]);
const request = `https://api/v1/notices`;
const fetchNotice = async () => {
try {
const response = await axios.get(request);
const responseResult = response.data;
setNoticeList(responseResult.items);
} catch (error) {
console.log(error.message);
}
};
useEffect(() => {
fetchNotice();
}, []);
return (
<>
<div className="m-8">
<NoticeCard notices={noticeList} />
<button
onClick={fetchNotice()}
>
๋๋ณด๊ธฐ
</button>
</div>
</>
);
}
export default NoticeList;
์ด ๋์์ ์ ํฌ๊ฐ ์ํ๋ ๊ฒ ์๋๋๋ค. ๊ธฐ์กด ๋ฐ์ดํฐ์ ์๋ก ๋ถ๋ ค์ง ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ setNoticeList (responseResult.items); ๋์ ์ ์๋์ ์ฝ๋๋ฅผ ํ์ฉํ์๋ฉด ๋ฉ๋๋ค.
setvideoList((oldData) => [...oldData, ...responseResult.items]);
Using the State Hook
state hook์ ํ์ฉํ ์์ ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
const [state, setState] = useState({});
setState(prevState => {
// Object.assign would also work
return {...prevState, ...updatedValues};
});