TILs

21일차 TIL (개인 프로젝트 ToDoList / 후발대 OT)

API284 2023. 6. 15. 00:15

기초강의를 듣고 어제 오후 늦게부터 개인 작업을 진행해 보았다.

 

//전체를 감싸주는 function을 선언한다.

function App() {
    const [todo, setTodo] = useState([
        {
            id: 1,
            title: "리액트 공부하기",
            details: "리액트 기초에 대하여",
            isDone: false,
        },
        {
            id: 2,
            title: "러닝 40분",
            details: "3:1 비율로 인터벌",
            isDone: false,
        },
    ]);
//useState는 기본 빈값으로 설정하는데, 여기에서는 예시 자료와

유사하게 하기 위해서 기본 세팅 값들을 넣어주었다.

 

//제목 input과 설명이 들어가는 input을 각자 선언해주었다.

    const [title, setTitle] = useState("");
    const [details, setDetails] = useState("");

 

//위 input에 값들(변경된 값)이 들어가면 그 값 (value)도 선언해준다. 
    const titleChangeHandler = (e) => {
        setTitle(e.target.value);
    };
    const detailsChangeHandler = (e) => {
        setDetails(e.target.value);
    };

//todo에 배열을 추가해주는 선언 

false 값을 버튼의 상태에 따라 바꿔주기위해 추가해 주었다.

 true : false;
    const addHandler = () => {
        const addContent = {
            id: todo.length + 1,
            title: title,
            details: details,
            isDone: false,
        };

//변경된 todo = setTodo에 기존 todo의 배열과 추가된 addContent를 추가해서 보여주기.
        setTodo([...todo, addContent]);
//추가해서 보여준 다음 input들의 내부는 비워주기.
        setTitle("");
        setDetails("");
    };

 

//삭제기능, 클릭시 해당 todo.id를 제외( filter ) 시키고 남긴다 = 이를 선언해 주고

다시 변경된 setTodo에 넣어준다.

    const delHandler = (id) => {
        const newTodo = todo.filter((todo) => todo.id !== id);
        setTodo(newTodo);
    };

//여기서 부터 헤매고 있는 부분이다. 조건문을 써서 클릭시, true : false가 바뀌며

true 혹은 false 인지 여부에 따라 버튼이 완료 또는 취소로 바뀌고

완료면 Don div로 넘어가고 다시 취소를 누르면 Working div로 돌아와야한다.


    // const passHandler = (props) => {
    //     const newTodo2 = todo.isDone ? "취소" : "완료";
    //     // console.log(newTodo2);

    //     function completeBtn() {
    //         todo({ isDone: true });
    //     }
    //     function cancelBtn() {
    //         todo({ isDone: false });
    //     }
    //     const todosIsDone = todo.isDone;
    //     let changebtn;
    //     if (todosIsDone) {
    //         changebtn = <completeBtn />;
    //     }
    // };

 

삭제 및 등록 클릭시 input tag 비워주기까지는 완료했는데 위에서 못 풀어 내려가고 있었다.

 

그냥 쉽게 생각해서 강의에 나온 예제를 실습해 본 그 파일 그대로 수정해 가면서 써내려갔는데

오히려 더 헷갈리게 된 거 같다.

팀원분과 대화를 하면 조언을 얻어서 해결을 하긴 했는데, 아직 내 것이 아닌거 같다. 몇 번 더 뜯어보고 곱씹어 보며 정리한 글을 내일 올려야겠다. 재밌다