본문 바로가기
Coding/React

React _ ToDoList 만들어보기(2) - 중간점검

by climba 2021. 3. 15.

여태까지 만든 코드들을 하나씩 뜯어보겠습니다.

 

//App.js

import { useState } from "react";
import styled from "styled-components";
import Box from "./box";

const Styled = {
  wrap: styled.div`
    width: 400px;
    height: 500px;
    display: flex;
    flex-direction: column; //(1)
    justify-content: flex-start;
    align-items: center;
    background-color: #49F48C;
  `,
};
function App() {
  const deleteHandler = (i) => {
    var temp = [...workArray]; //(2)
    temp.splice(i, 1); //(3)
    setWorkArray(temp); //(4)
  };
  const [workArray, setWorkArray] = useState([ //(5)
    {
      title: "할 일1",
      detail: "상세 정보1",
    },
    {
      title: "할 일2",
      detail: "상세 정보2",
    },
    {
      title: "할 일3",
      detail: "상세 정보3",
    },
    {
      title: "할 일4",
      detail: "상세 정보4",
    },
    {
      title: "할 일5",
      detail: "상세 정보5",
    },
  ]);
  return (
    <Styled.wrap>
      {workArray.map((v, idx) => { //(6)
        return (
          <Box
            title={v.title}
            detail={v.detail}
            deleteHandler={deleteHandler}
            id={idx}
          ></Box>
        );
      })}
    </Styled.wrap>
  );
}

export default App;

 

(1) flex-direction, justify-content, align-items 등은 css중에서 flex에 해당하는 속성들이니 flexboxfroggy.com/#ko 이 사이트에서 flex에 대해 배우고 오시면 됩니다.

 

(2) [...workArray]는 workArray라는 배열을 하나 더 복사하는 것입니다.

 

(3) list.splice(i,k)는 list의 i번째 인덱스부터 k개 만큼 제거하는 것입니다.

 

(4) setworkArray(temp)는 workArray를 temp로 재설정하는 것입니다.

 

(5) const [workArray, setWorkArray] = useState(x) -> useState는 react에서 바뀌는 값을 관리할때 사용됩니다.

workArray라는 변수와 이 변수가 바뀔때 사용되는 함수 setWorkArray를 묶어서 const [workArray, setWorkArray]로 설정하고 workArray의 초기값 x를 useState(x)에 넣어줍니다.

 

(6) map함수는 파이썬에서와 마찬가지로 리스트의 모든 항목마다 특정 함수를 실행시키는 함수입니다.

 

 

 

//box.js

import styled from "styled-components";

const Styled = { // (1)
  box: styled.div`
    width: 100px;
    height: 100px;
    background-color: red;
  `,
  item: styled.div`
    width: 90%;
    height: 50px;
    background-color: #FCFFA9;
    margin-top: 10px;
    border-radius: 10px;
  `,
  title: styled.div`
    width: 100 %;
    height: 60%;
    font-size: 15px;
    margin-left: 6px;
    margin-top : 2px;
  `,
  sub: styled.div`
    width: 100%;
    height: 40$;
    font-size: 8px;
    margin-left: 6px;
  `,
  delete: styled.button`
    width: 3px;
    height: 88%;
    background-color: aqua;
    float: right;
    margin-right: 8px;
    margin-top: 8px;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
    font-size: 1px;
    border: 1px solid green
  `
};

const Box = (props) => { // (2)
    const deleteHandler = props.deleteHandler
  return (
    <Styled.item>
      <Styled.title>
        {props.title}
        <Styled.delete
          onClick={() => {
            deleteHandler(props.id); //(3)
          }}
        >삭제</Styled.delete>
      </Styled.title>
      <Styled.sub>{props.detail}</Styled.sub>
    </Styled.item>
  );
};

export default Box;

(1) styled 는 저번 포스팅에서 설명했듯 css 파일을 js 파일 안에서 수정 할 수 있도록 합니다.

Styled라는 변수를 설정해준 후 그 안에 객체마다의 css 스타일을 적어주면 됩니다.

 

(2) props라는 인자를 받아서 Box라는 함수가 위에 있는 App.js 파일에서 쓰일때 title, detail, id 등을 각각 설정할 수 있게 합니다.

 

(3) onClick = {함수} 는 특정 객체를 클릭할때마다 함수가 실행되도록 하는 것이다. 위 코드에서는 delete버튼을 클릭 할 떄마다 deleteHandler이 실행되어 props.id에 해당하는 값이 workArray에서 삭제되도록 만든 것입니다.

 

현재까지 결과물

=> 삭제버튼을 조금 더 수정하고 디테일 적인 요소들을 조금 더 손봐야 할 것 같다.

'Coding > React' 카테고리의 다른 글

React _ ToDoList 만들어보기(1) - React 및 Javascript 기초  (0) 2021.03.15

댓글