리액트 CRUD 기본 코드 useState([])

2023. 3. 30. 15:17개발/토막난 상식

반응형
import React, { useEffect, useState } from "react";
import { Button, Modal} from 'antd';

import "./TestCode.scss"


const TestCode = () => {
    useEffect(() => {
        // 코드 목록 불러오는 로직
        
    },[]);



    //input 값 관리

    const [commCd, setCommCd] = useState({
        code_id : "",
        code_nm : "",
        etc : "",
        del_yn : "yes",
        use_yn : "yes",
    });




    const [code_id, setCode_id] = useState("");
    const [code_nm, setCode_nm] = useState("");
    const [etc, setEtc] = useState("");
    const [del_yn, setDel_yn] = useState("yes");
    const [use_yn, setUse_yn] = useState("yes");


    // codes 배열 관리
    const [codes, setCodes] = useState([]);


        //코드 생성
    const codeSubmitHandler = (e) => {
        e.preventDefault();
        
        Modal.confirm({
            title: "코드 추가 확인창",
            content: "해당 코드를 추가하시겠습니까? 라는 문구 출력",
            okText: "확인버튼",
            cancelText: "취소버튼",
            onOk: () => {
                try {
                    const isDuplicated = codes.some((code) => code.code_id === code_id);
                    if (isDuplicated) {
                        alert("이미 존재하는 코드 ID입니다.");
                        return;
                    }
                    if (code_id && code_nm !== "") {
                        setCodes([
                            ...codes,
                            {
                                code_id: code_id,
                                code_nm: code_nm,
                                etc: etc,
                                del_yn: del_yn,
                                use_yn: use_yn,
                            }
                        ])
                        setCode_id("");
                        setCode_nm("");
                        setEtc("");
                        setDel_yn("yes");
                        setUse_yn("yes");
                        alert("추가되었습니다")
                        
                    } else {
                        alert("code_id 값과 code_nm 는 필수입니다")
                    }
                } catch(e) {
                    console.error(e);
                }
            }
        })
        
    }

        //코드 업데이트
    const codeUpdateHandler = (e) => {
        e.preventDefault();
        
        const updatedCodes = codes.map((code) =>
        code.code_id === code_id ?
            {
                code_id: code_id,
                code_nm: code_nm,
                etc: etc,
                del_yn: del_yn,
                use_yn: use_yn,
            }
            : code
    );

        if (code_id && code_nm !== "") {
            setCodes(updatedCodes);
            setCode_id("");
            setCode_nm("");
            setEtc("");
            setDel_yn("yes");
            setUse_yn("yes");
            

            alert("수정되었습니다.");
        } else {
            alert("code_id 값과 code_nm 는 필수입니다")
        }
    }
    
        //코드 삭제
    const codeDeleteHandler = (e) => {
        e.preventDefault();
        const updatedCodes = codes.filter((code) => code.code_id !== code_id);
        setCodes(updatedCodes);
        setCode_id("");
        setCode_nm("");
        setEtc("");
        setDel_yn("yes");
        setUse_yn("yes");
    }


        //코드 선택
    const codeSelectHandler = (code) => {
        setCode_id(code);
        const selectedCode = codes.find((c) => c.code_id === code);
        if (selectedCode) {
            setCode_nm(selectedCode.code_nm);
            setEtc(selectedCode.etc);
            setDel_yn(selectedCode.del_yn);
            setUse_yn(selectedCode.use_yn);
        } 
        console.log(code)
    }
    



    return (
        <>
            <div  className="container">
                
                <div className="innerBox">
                    <h1 style={{
                                padding:"25px",
                            }}
                    >코드 ID 목록</h1>
                    <ul style={{
                                overflow: "scroll",
                            }}>
                    
                    {codes.map(code => (
                        <div>
                            <li
                                id={code.code_id}
                                onClick = {(e) => codeSelectHandler(e.target.id)}
                            > {code.code_id}
                            </li>
                        </div>
                        
        ))}
                    </ul>
                </div>

                <div className="innerBox">
                    <form>
                        <label>코드 ID:
                            <input
                                type="text" 
                                name="code_id"
                                value={code_id} 
                                onChange={e => setCode_id(e.target.value)}
                                placeholder="code_id"
                                required 
                            />
                        </label>
                        <label>코드 명: 
                            <input 
                                required
                                value={code_nm}
                                onChange={e => setCode_nm(e.target.value)}
                                type="text"
                                placeholder="code_nm"
                                />
                        </label>
                        <label>비고:
                            <input 
                                type="text" 
                                name="etc"
                                value={etc}
                                onChange={e => setEtc(e.target.value)}
                            />
                        </label>
                        <label>삭제여부:
                            <select
                                value={del_yn}
                                onChange={e =>setDel_yn(e.target.value)}
                            >
                                <option value="yes">Yes</option>
                                <option value="no">No</option>
                            </select>
                        </label>
                        <label>사용여부:
                            <select
                                value={use_yn}
                                onChange={e =>setUse_yn(e.target.value)}
                            >
                                <option value="yes">Yes</option>
                                <option value="no">No</option>
                            </select>
                        </label>
                        <Button onClick={codeSubmitHandler} type="primary">추가</Button>
                        <Button onClick={codeUpdateHandler}>수정</Button>
                        <Button onClick={codeDeleteHandler} type="dashed">삭제</Button>
                        
                    </form>
                    


                    
                </div>

            </div>

        </>
    )

};

export default TestCode;

 

반응형

'개발 > 토막난 상식' 카테고리의 다른 글

TypeScript란 무엇인가?  (0) 2023.03.30
react-redux 사용 예시  (0) 2023.03.30
[코드 4294967295 (0xffffffff)로 프로세스 종료됨]  (0) 2023.03.30
장고의 로그인 써드파티 추천  (0) 2023.03.30
REST vs GraphQL  (0) 2023.03.29