React Day 7 (TodoList 마무리)

심재원·2023년 11월 14일
2
import { BrowserRouter, Route, Routes } from "react-router-dom";
import Main from "./pages/main";
import Detail from "./pages/detail";

const App = () => {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Main />} />
        <Route path="/:id" element={<Detail />} />
      </Routes>
    </BrowserRouter>
  );
};

export default App;

-> 동적 라우팅 설정

import { Link } from "react-router-dom";

const TodoCard = ({ todo }) => {
  return (
    <li className="h-12 flex items-center text-xl">
      <span className="w-1/12 text-right">{todo.id}</span>
      <span className="w-8/12 pl-2">{todo.title}</span>
      <Link
        to={`/${todo.id}?title=${todo.title}&is-done=${todo.isDone}`}
        className="w-3/12 hover:font-bold"
      >
        Detail
      </Link>
    </li>
  );
};

export default TodoCard;

to={/${todo.id}?title=${todo.title}&is-done=${todo.isDone}} -> 쿼리스트링 사용

import { useEffect } from "react";
import { useParams, useSearchParams } from "react-router-dom";

const Detail = () => {
  const { id } = useParams();
  const [searchParams] = useSearchParams();

  const title = searchParams.get("title");
  const isDone = searchParams.get("is-done");

  useEffect(() => console.log(id), [id]);
  useEffect(() => console.log(title), [title]);
  useEffect(() => console.log(isDone), [isDone]);

  return (
    <div className="bg-blue-100 min-h-screen flex justify-center items-center">
      <span>{id}</span>
      <span>{title}</span>
    </div>
  );
};

export default Detail;

디테일 페이지를 만들어서 app.jsx의 라우트에 부착했음.
디테일 페이지는 컴포넌트들이랑 다르게 데이터가 없음.
데이터를 뭐로부터 받느냐? 주소창으로부터 받기로 함
2(params)?title=(물음표 뒤에 내용은 쿼리스트링) 주소로 받음

리액트라우터돔 사용해
useparam은 객채 :
searchparam은 배열로 받아옴

title이랑 is-done값을 받아서
useEffect로 값들이 잘 들어오는지 확인하고

return으로 키값을 확인해주었다.

const onClickDel = () => {
    const localTodos = localStorage.getItem("todos");

    if (!localTodos) return;

    const parsedTodos = JSON.parse(localTodos);

    const deletedTodos = parsedTodos.filter((v) => {
      if (v.id !== +id) {
        return v;
      }
    });

Delete를 하려면 비교를 해야 함.

코딩 문제 풀기 사이트

https://www.acmicpc.net/problem/30621

현재는 local storage에 todolist를 만들어서 관리하고 있는데
실제로는 백엔드랑 데이터베이스 만들어서 관리함

DB에 다 있을텐데 백엔드는 DB 출입 권한이 있음.
백엔드 입장에서 접근가능한 데이터의 권한이 있고 그 DB에만 접근할 수 있음.

우리가 여태까지 했던 건 Front에서만 구현한 것.
BackEnd까지 배우면 백엔드에 저장되는 거고
DB까지 배우면 DB까지 저장되는 것.

Redux를 써서 뭔가를 할 수 있기도 함.

블록체인은 다음과 같은 느낌

강사님 github 참고

https://github.com/h662/BCS4-P2-Todolist-Dynamic-Routing

0개의 댓글