<aside> 🔥 결과물 링크
</aside>
<aside> 🔥 Intro
기본적인 기능만을 갖춘 TodoList입니다.
아래의 기능들이 있습니다.
<aside> 🔥 React에서 Modal 구현하기
기본 window 위에 컴포넌트를 띄우는 것 사용자가 focus되는 효과가 있다.
index.js에 새로운 외부 DOM을 생성하는 것으로 시작한다.
외부 DOM을 연결해서 컴포넌트를 띄우는 방식이다.
create.Portal로 외부 DOM에 렌더링 하는 기능 제공
첫번째 인자로 렌더링할 수 있는 children, 두번째 인자는 DOM
createPort(children, rootElement)
import React from "react";
import { createPortal } from "react-dom";
const Portal = ({ children }) => {
// modal-root에 렌더링
const rootElement = document.getElementById("#modal-root");
return <>{rootElement ? createPortal(children, rootElement) : children}</>;
};
export default Portal;
컴포넌트가 mount 혹은 unmount될 때 transition을 줄 수 있는 라이브러리이다.
apper, enter, exit의 클래스 이름을 적용해서 사용 가능
// modal.css
.modal-enter {
opacity: 0;
}
.modal-enter-active {
opacity: 1;
transition: opacity 300ms;
}
.modal-exit {
opacity: 1;
}
.modal-exit-active {
opacity: 0;
transition: opacity 300ms;
}
모달 컴포넌트 바깥 부분 클릭시 onClose를 실행시키기 위해서 Dim이라는 구역을 잡았다.
CSSTransition을 사용해서 모달 컴포넌트가 enter, exit될 때 효과를 넣었다.
children으로 받는 AddTodoModal.js로 모달 창을 구성하고, selector로 외부 DOM을 연결했다.
<aside> 🔥 Dependencies
<aside> 🔥 Components
<aside> 🔥 App.js
state : todo리스트 관리, 모달 열림 유무 관리
function : todo 삭제, 수정, 완료, 중요도, modal 열림, 닫힘
ref : todo id 참조
<aside> 🔥 Templates.js
todo 앱을 가운데로 배치하는 역할 및 전체적인 틀
<aside> 🔥 TodoHeader.js
카테고리 제목 및 남은 개수 렌더링, 추 후 탭으로 전체, 완료되지 않은 항목, 완료된 항목으로 나눌 예정
<aside> 🔥 TodoList.js
최상위 루트에서 관리되고있는 todo리스트 항목들을 가져와서 TodoListItem으로 매핑 시켜주는 역할
추가하기 모달이 구현되어 있으며, 완료됨과 완료되지 않음으로 나뉘어서 렌더링되도록 함.
<aside> 🔥 TodoListItem.js
state : text를 관리, 수정 모드 관리
function : text input onchange, 수정 모드 토글, 수정 완료 기능