소개
이 랩에서는 React 를 사용하여 닫을 수 있는 알림 (Closable Alert) 컴포넌트를 만들 것입니다. 이 컴포넌트를 통해 사용자는 특정 유형의 메시지를 표시하고 필요에 따라 알림을 닫을 수 있습니다. 이 랩을 완료하면 useState() 및 useEffect() 훅을 사용하여 필요에 맞게 쉽게 사용자 정의할 수 있는 동적 컴포넌트를 만드는 방법을 배우게 됩니다.
닫을 수 있는 알림 (Closable Alert)
index.html및script.js는 이미 VM 에 제공되었습니다. 일반적으로script.js및style.css에만 코드를 추가하면 됩니다.
type prop 을 사용하여 알림 컴포넌트를 렌더링합니다.
Alert 컴포넌트는 다음 props 를 받습니다.
isDefaultShown: 알림이 처음에 표시될지 여부를 결정하는 부울 값 (기본값은false)timeout: 알림이 사라지기 전까지의 시간 (밀리초) 을 지정하는 숫자 (기본값은250)type: 알림 유형을 결정하는 문자열 (예: "warning", "error", "info")message: 알림에 표시할 메시지를 포함하는 문자열
컴포넌트는 다음을 수행합니다.
useState()훅을 사용하여isShown및isLeaving상태 변수를 생성하고 둘 다 처음에false로 설정합니다.- 컴포넌트 언마운트 시 타이머 인스턴스를 지우기 위해
timeoutId변수를 정의합니다. useEffect()훅을 사용하여isShown의 값을true로 업데이트하고 컴포넌트가 언마운트될 때timeoutId를 사용하여 인터벌을 지웁니다.closeAlert함수를 정의하여 페이드 아웃 애니메이션을 표시하고setTimeout()을 통해isShown을false로 설정하여 컴포넌트를 DOM 에서 제거된 것으로 설정합니다.isShown이true인 경우 알림 컴포넌트를 렌더링합니다. 컴포넌트는typeprop 을 기반으로 적절한 스타일을 가지며isLeaving이true인 경우 페이드 아웃됩니다.
다음은 코드입니다.
@keyframes leave {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.alert {
padding: 0.75rem 0.5rem;
margin-bottom: 0.5rem;
text-align: left;
padding-right: 40px;
border-radius: 4px;
font-size: 16px;
position: relative;
}
.alert.warning {
color: #856404;
background-color: #fff3cd;
border-color: #ffeeba;
}
.alert.error {
color: #721c24;
background-color: #f8d7da;
border-color: #f5c6cb;
}
.alert.leaving {
animation: leave 0.5s forwards;
}
.alert .close {
position: absolute;
top: 0;
right: 0;
padding: 0 0.75rem;
color: #333;
border: 0;
height: 100%;
cursor: pointer;
background: none;
font-weight: 600;
font-size: 16px;
}
.alert .close::after {
content: "x";
}
const Alert = ({ isDefaultShown = false, timeout = 250, type, message }) => {
const [isShown, setIsShown] = React.useState(isDefaultShown);
const [isLeaving, setIsLeaving] = React.useState(false);
let timeoutId = null;
React.useEffect(() => {
setIsShown(true);
return () => {
clearTimeout(timeoutId);
};
}, [isDefaultShown, timeout, timeoutId]);
const closeAlert = () => {
setIsLeaving(true);
timeoutId = setTimeout(() => {
setIsLeaving(false);
setIsShown(false);
}, timeout);
};
return (
isShown && (
<div
className={`alert ${type} ${isLeaving ? "leaving" : ""}`}
role="alert"
>
<button className="close" onClick={closeAlert} />
{message}
</div>
)
);
};
ReactDOM.createRoot(document.getElementById("root")).render(
<Alert type="info" message="This is info" />
);
오른쪽 하단의 'Go Live'를 클릭하여 포트 8080 에서 웹 서비스를 실행하십시오. 그런 다음 Web 8080 탭을 새로 고쳐 웹 페이지를 미리 볼 수 있습니다.
요약
축하합니다! 닫을 수 있는 알림 (Closable Alert) 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.