โโ๊ด๋ฆฌ์ ํ๋ฉด ์ ์
โ manager.jsx ( ์์น: linkservice/client/src/component/manager.jsx )
--------------------------------------------------------------------------------------------------
CSS ์ ๋จผ์ ์ถ๊ฐํ๋ค. ( links.css ํ์ผ์ ์ถ๊ฐ )
/* ๋งํฌ ์คํ์ผ์ ์์ ์ฃผ๋๊ฒ */
.a-tag {
color: inherit;
text-decoration: inherit;
width: 100%;
}
.manager-button {
border-radius: 8px;
border: none;
margin: 0;
width: 100%;
margin-bottom: 10px;
height: 50px;
padding: 0 20px;
font-size: 18px;
background-color: #8090F5;
color: #fff;
}
manager.jsx ์ ManagerHome() ์ ์์ฑํ๋ค.
import React from "react"
import { Link } from "react-router-dom"
export default function ManagerHome() {
return (
<>
<Link to="/links/list">
<button type="button" className="manager-button">
<div> ๋งํฌ ์ ๋ณด ๊ด๋ฆฌ </div>
</button>
</Link>
<Link to="#" >
<button type="button" className="manager-button">
<div> ์ค์ผ์ค ์ ๋ณด ๊ด๋ฆฌ </div>
</button>
</Link>
</>
)
}
App.js์ Route์ ์ถ๊ฐํ๋ค.
โโ๋งํฌ์ ๋ณด ๊ด๋ฆฌํ๋ ๋ฆฌ์คํธ ํ๋ฉด ์ ์
โ links.list.jsx ( ์์น: linkservice/client/src/component/links.list.jsx )
-------------------------------------------------------------------------------------------------
links.list.jsx๋ ๋งํฌ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ์ญ์ ๊ธฐ๋ฅ๊ณผ ์ ๊ท๋ฑ๋ก/ํธ์ง ํ๋ฉด์ผ๋ก ์ด๋ํ๊ธฐ ์ํ ํ๋ฉด์ด๋ค.
ํ๋ฉด์ links.jsx์ ๋น์ทํ๊ณ , ์ญ์ ๋ฒํผ๊ณผ ๋ด์ฉ์ ํด๋ฆญํ๋ฉด /link/edit/{id} ๋ก ๋๊ธฐ๋ฉด ๋๋ค.
์ญ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ handleDelete(id)๋ linkService์ deleteLink(id) ์ ํธ์ถํ๋ฉด ๋๋ค.
โ navigate(0)๋ ํ์ฌ ํ์ด์ง๋ฅผ reloadํ๋ค.
import React, { useState, useEffect } from "react";
// mui Icon์์ Delete ๋ฒํผ์ importํ๋ค.
import { DeleteOutline } from "@mui/icons-material";
import { Link , useNavigate } from 'react-router-dom'
import linkService from "./service/service";
export default function LinksList () {
const [data, setData] = useState([{}])
const navigate = useNavigate();
// ๋งํฌ ๋ฆฌ์คํธ๋ฅผ ์ ์ฒด ๋ชฉ๋ก์ ๋ถ๋ ค์ค๋ getLinks์ ํตํด ๋ฐ์ ์จ๋ค.
useEffect(() => {
linkService.getLinks().then(
(res)=> {
setData(res.data.links)
console.log(res.data.links)
}, (error) => {
alert(error.res.data.message )
}
)
}, [])
// ์ญ์ ๋ฒํผ์ ํด๋ฆญ์ ์ญ์ ํ๋ ํจ์๋ฅผ ์์ฑํ๋ค.
// param : id
const handleDelete = (id) => {
// e.preventDefault();
linkService.deleteLink(id).then(
(res)=> {
alert(res.data.message)
navigate(0)
}, (error) => {
alert(error.res.data.message )
}
)
}
return (
<>
<div>
<Link to = "/create">
<button type="submit" className="manager-button">+ ์ ๊ท ๋งํฌ ์ ๋ณด ๋ฑ๋ก</button>
</Link>
</div>
{(typeof data ==='undefined') ? (
<p>Loading....</p>
) : (
data.map((link, index) => (
<div className="link-container" key={index} >
<div className="link-wrapper">
<div className="link-show">
<img
src={link.imageurl}
alt=""
className="link-img"
/>
<Link to={'/link/edit/' + link.id} className="a-tag">
<div className="list-title"> {link.name }</div>
</Link>
<div className="delete-icon" name='deleteid'>
<DeleteOutline fontSize='large' color="disabled"
onClick={() => handleDelete(link.id)}/>
</div>
</div>
</div>
</div>
))
)}
</>
)
}
์ญ์ ์ด๋ฒคํธ์ธ handleDelete๋ API ํจ์๊ฐ ๋งํฌ์ ๋ณด๋ง ์ญ์ ํ๋ค.
ํ์ง๋ง, ์ด๋ฏธ์ง๋ฅผ ํ์ผ ํํ๋ก ๋ฑ๋ก์ด ๋๋ฏ๋ก, ๋งํฌ์ ๋ณด ์ญ์ ๊ฐ ๋๋ฉด ์ด๋ฏธ์ง ํ์ผ๋ ์ญ์ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋ค.
์ด๋ฏธ ๋ค์ด๋ก๋๋ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ์ฒ๋ฆฌํ๋ ๋ฐฑ์๋๋ ๋ค์ํธ์.....
'React&Python์ผ๋ก ์น๊ฐ๋ฐ > ๋งํฌ์๋น์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#17. ๋งํฌ์๋น์ค ํ๋ก์ ํธ ์ ๋ฆฌ(git ์ฃผ์) (0) | 2023.05.02 |
---|---|
#16. ๋งํฌ์ ๋ณด ํธ์ง ๋ฐ ์ด๋ฏธ์ง ํ์ผ๋ ์ญ์ ์ฒ๋ฆฌ (0) | 2023.04.29 |
#14. material-icons ๋ฅผ ํตํ ๋ฉ๋ดํ๋ฉด (0) | 2023.04.29 |
#13. ๋ฑ๋กํ๋ฉด์์ ๋ด์ฉ ์ ์ฅ ๋ฐ ์ด๋ฏธ์ง ์ ์ฅ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2023.04.15 |
#12. React์์ Drag & Drop์ ์ด์ฉํ ์ด๋ฏธ์ง ์ ๋ก๋ (0) | 2023.04.12 |