react + JSON-Server ์ฃผ์ฐจ๋ฑ๋ก์ ํ ์ฐจ๋ค์ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธํํ์ฌ ํ์ธ, ์ถ๊ฐ, ์ญ์ , ์์ ์ ํ ์ ์๋ค.
์ฃผ์ฐจ๋ฑ๋ก์ ๋ฐ๋ก ํ๊ฑฐ๋ ์ฃผ์ฐจ๋น๋ฅผ ๋ฏธ๋ฆฌ ์ง๋ถํ ์ฐจ๋ค์ ๋ฆฌ์คํธํ ํ์ฌ ์ฐจ์ด๋ฆ,ํ์ฌ,๋ฒํธ๋ฅผ ์ ๋ ฅํ์ฌ ํ์ธํ ์ ์๋ ์ฌ์ดํธ์ ๋๋ค.
- ๋ ๋๋ง ์ฒซํ๋ฉด ๋ฆฌ์คํธ์์๋ ์ฃผ์ฐจ๋ฑ๋ก์ ํด๋์ ์ฐจ๋ค์ ์ ๋ณด๋ฅผ db.json์ ์ด์ฉํ์ฌ ์๋ฒ์ ์ ์ฅํด๋๊ณ , ํ์ธ ํ ์ ์๊ฒ ํด์ค๋ค.
- Add Entered car(+)๋ฒํผ์ ์ด์ฉํ์ฌ ์ฐจ์ด๋ฆ, ํ์ฌ, ์ฐจ๋ฒํธ๋ฅผ ์ ๋ ฅํ์ฌ ์ถ๊ฐํ ์ ์๋ค.
- Actions์ ๋ฒํผ๋ค์ ํตํด ์์ , ์ ๊ฑฐ, ์ ๋ณดํ์ธ์ ํ ์ ์๋ค.
- Edit๋ฒํผ์ ์ฐจ์ ์ ๋ณด๋ค์ ์์ ํ์ฌ ์์ ํ ๊ฐ๋ค์ ๋ชฉ๋ก์ ๋ค์ ๋ฑ๋ก์ ํด์ค๋๋ค.
- Remove๋ฒํผ์ ์ฐจ์ ์ ๋ณด๋ค์ db.json ์๋ฒ์ ๋ฐฐ์ด๋ก๋ถํฐ ์ ๊ฑฐ๋ฅผ ํด์ค๋๋ค.
- Details๋ฒํผ์ ์ฐจ์ ์ ๋ณด๋ค(์ฐจ์ด๋ฆ, ํ์ฌ, ์ฐจ๋ฒํธ)๋ฅผ ๋ํ ์ผํ๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ฒํผ์ ๋๋ค.
useEffect(() => {
fetch("http://localhost:8000/cars/")
.then((res) => {
return res.json();
})
.then((resp) => {
setCardata(resp);
})
.catch((err) => {
alert("์๋ฌ๊ฐ ๋ฐ์ํ์์ต๋๋ค !!");
});
}, []);
http://localhost:8000/cars/ ์๋ฒ๋ฅผ ํตํด db.json์ ๋ฑ๋ก๋ ์ฐจ๋ค์ ์ ๋ณด๋ฅผ ๋ ๋๋ง์ ํตํด ๋ณด์ฌ์ฃผ๊ณ ,
์๋ฌ๊ฐ ์กํ๋ฉด catch๋ฌธ์ ํตํด alert๋ก ์ฌ์ฉ์์๊ฒ ์๋ฆฐ๋ค.
fetch("http://localhost:8000/cars", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(cardata),
}
Creata ์ฐฝ์ ํตํ์ฌ cardata์ ๊ฐ๋ค์ JSON.stringify๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์ด๋ก ๋ฐํํด์ค๋ค.
const Removefunction = (id) => {
if (window.confirm("์ ๋ง ์ญ์ ํ์๊ฒ ์ต๋๊น?")) {
fetch("http://localhost:8000/cars/" + id, {
method: "DELETE",
})
.then((res) => {
alert("์ฑ๊ณต์ ์ผ๋ก ์ญ์ ๋์์ต๋๋ค.");
window.location.reload();
})
.catch((err) => {
alert("์๋ฌ๊ฐ ๋ฐ์ํ์์ต๋๋ค !!");
});
}
};
Remove๋ฒํผ์ ๋๋ฅด๋ฉด alert๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ฐฝ์ด ๋จ๊ณ ํ์ธ์ ๋๋ฅด๋ฉด http://localhost:8000/cars/ ์๋ฒ์ ๋ฐ์ดํฐ์์ ์ญ์ ๊ฐ ๋๊ฒ ๋๋ค.
์ญ์ ๊ฐ ์๋ฃ๋๋ฉด '์ฑ๊ณต์ ์ผ๋ก ์ญ์ ๋์์ต๋๋ค'๋ผ๋ ์๋ฆผ์ฐฝ์ ํตํด ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๊ณ ํ๋ฉด์ด ๋ค์ ๋ ๋๋ง๋๋ค.
- ์๋ฌ๋ด์ฉ: CarDetail.js์์ฑ ์ค์ No routes matched location์ ์๋ฌ๋ฉ์ธ์ง๊ฐ ์ฝ์์ฐฝ์ ๋ธ.
์ด ์๋ฌ๋ react๊ฐ ๋ ๋๋๋ฉด์ app.js์์ CarDetail๊ฐ ์ ๋๋ก ๋ ๋๋ง ๋์ง์๊ณ ๋๋ด์ ธ์ ๋งจ ์ฒ์ ๋ ๋ ์ ์ด๋ฌํ ์๋ฌ ๋ฌธ๊ตฌ๊ฐ ๋ฌ ๊ฒ์ด์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ: app.js์์ CarDetail์ Route path๋ฅผ ์ ๋๋ก ํ์ธํ๊ณ /๊ฐ ๋น ์ง์ง ์์๋์ง ํ์ธํ์ฌ path๊ฒฝ๋ก์ /๊ฐ ๋น ์ ธ์๋ ๊ฒ์๋ณด๊ณ ์ถ๊ฐํ์ฌ ํด๊ฒฐํ์๋ค. - ์๋ฌ๋ด์ฉ: 404 Not Found์ ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ ์ฐพ์๋ณด๋ ์๋ฒ๋ฅผ ์ฐพ๊ธด ํ์ผ๋ URL์ ํด๋น๋๋ ํ์ด์ง(ํ์ผ)์ ์ฐพ์ ์ ์์ ๋ ๋ฐ์ํ๋ค๊ณ ํ์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ: Vscode๋ฅผ ์ฌ์คํํ๊ณ npm start, db๊ฒฝ๋ก ์ค์ ๊น์ง๋ง ์๋ฃํ๊ณ ์์ํ์ฌ react-router-dom์ ์ค์นํ์ง ๋ชปํด์ ์๊ธด ์๋ฌ์๋ค.
npm i react-router-dom
์ ์คํ์์ผ ๋ผ์ฐํฐ๊น์ง ์ค์น์๋ฃํ๊ณ ์คํํ์๋๋ ์๋ฌ๊ฐ ํด๊ฒฐ๋์๋ค.
- node >= 18.14.0
- react >= 18.2.0
- bootstrap >= 5.2.3
- json-server >= 0.17.1
- react-router-dom >= 6.8.0
npx create-react-app .
npm install react-router-dom --save
npm install react-bootstrap bootstrap
npm install json-server
json-server --watch db.json --port 8000
์ฒซ ๋ ๋ํ๋ฉด
Create ํ๋ฉด
Edit ํ๋ฉด
Remove ํ๋ฉด
Detail ํ๋ฉด