โŽŸโŽœ๊ด€๋ฆฌ์ž ํ™”๋ฉด ์ œ์ž‘

 โŒ˜ 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์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

App.js

โŽŸโŽœ๋งํฌ์ •๋ณด ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ํ™”๋ฉด ์ œ์ž‘

 

โŒ˜ 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 ํ•จ์ˆ˜๊ฐ€ ๋งํฌ์ •๋ณด๋งŒ ์‚ญ์ œํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์ด๋ฏธ์ง€๋ฅผ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋“ฑ๋ก์ด ๋˜๋ฏ€๋กœ, ๋งํฌ์ •๋ณด ์‚ญ์ œ๊ฐ€ ๋˜๋ฉด ์ด๋ฏธ์ง€ ํŒŒ์ผ๋„ ์‚ญ์ œ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

 

์ด๋ฏธ ๋‹ค์šด๋กœ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฑ์—”๋“œ๋Š” ๋‹ค์ŒํŽธ์—.....

 

+ Recent posts