본문 바로가기
리액트

투두리스트

by 픠버 2022. 12. 14.

오늘 리액트 투두리스트 보충 수업을 들으면서 map과filter에 개념에 대해서 한번 더 복습하였다 .

import React from "react";
import Todo from "./Todo";

export default function TodoList({ todos, isActive, setTodos }) {
const todoBox = { border: "1px solid black", padding: "20px" };
return (
<>
<h4>{isActive === true ? "해야 할 일" : "완료 한 일 "}</h4>
{todos
.filter((item) => item.isDone === !isActive)
.map((item) => {
return <Todo item={item} isActive={isActive} setTodos={setTodos} />;
})}
</>
);
}
일단 map 과 filter의 차이는 

map() 은 새로운 배열을 반환하고,

맵은 모든 요소를 다돌고 배열의 인덱스만큼 출력한다 

 

filter() 는 조건에 부합하는 요소들을 모아 배열로 반환한다.

필터를 이용하여 원하는 요소들만 모아 배열로 만들 수 있어서 투두리스트 만들 때 유용하게 사용된다!

 

투두리스트 하면서 헷갈리는 부분이 드릴링이다.

드릴링이란

props 오로지 하위 컴포넌트로 전달하는 용도로만 쓰이는 컴포넌트들을 거치면서 React Component 트리의 부분에서 다른 부분으로 데이터를 전달하는 과정인데 , 아직도 너무 헷갈린다.

1.

import { useState } from "react";
import "./App.css";
import Header from "./components/Header";
import Input from "./components/Input";
import TodoList from "./components/TodoList";
import { v4 as uuidv4 } from "uuid";

function App() {
const [todos, setTodos] = useState(initialstate);
return (
<div>
<Header>헤더 입니다!!</Header>

<main style={{ backgroundColor: "#ceedd7", padding: "20px" }}>
<Input setTodos={setTodos} />

<TodoList isActive={true} todos={todos} setTodos={setTodos} />
<TodoList isActive={false} todos={todos} setTodos={setTodos} />
</main>
<footer>푸터</footer>
</div>
);
}

export default App;

const initialstate = [
{
title: "제목1",
contents: "내용1",
isDone: false,
id: uuidv4(),
},
{
title: "제목2",
contents: "내용2",
isDone: true,
id: uuidv4(),
},
{
title: "제목3",
contents: "내용3",
isDone: false,
id: uuidv4(),
},
];

2.

export default function TodoList({ todos, isActive, setTodos }) {
const todoBox = { border: "1px solid black", padding: "20px" };
return (
<>
<h4>{isActive === true ? "해야 할 일" : "완료 한 일 "}</h4>
{todos
.filter((item) => item.isDone === !isActive)
.map((item) => {
return <Todo item={item} isActive={isActive} setTodos={setTodos} />;
})}
</>
);

3.

export default function Todo({ setTodos, isActive, item }) {
const handleDelteButtonClick = () => {
setTodos((prev) => prev.filter((t) => t.id !== item.id));
};

const handleSwichButtonClick = () => {
setTodos((prev) =>
prev.map((t) => {
if (t.id === item.id) {
return { ...t, isDone: !t.isDone };
} else {
return t;
}
})
);
};
 
setTodos를 Todo.jsx까지 드릴링
app.jsx -> TodoList.jsx -> Todo.jsx
만약 페이지 수가 많은 프로젝트라고 하면 더 걱정이 되는 문제이다 . 그래서 리덕스를 쓰긴 한다는데 ,,, 아직 시작도 못하고 있다.

투두 연습

'리액트' 카테고리의 다른 글

TodoList 연습  (0) 2022.12.13
리액트  (0) 2022.12.09
리액트  (0) 2022.12.08
react  (0) 2022.12.07
React  (0) 2022.12.05