// FavoriteCardDeck.tsx
const onPressStar = (quote: Quote) => {
dispatch(removeQuote(quote));
dispatch(removeStar(quote));
const curCardIndex = (swiperRef.current?.state as any)?.firstCardIndex;
// 현재 보는 카드의 인덱스가 0이 아니고,
// 뒤에 카드가 없을때, 인덱스 -1 로 위치 변경
if (curCardIndex !== 0 && curCardIndex === favoriteQuotes.length - 1) {
swiperRef.current?.jumpToCardIndex(curCardIndex - 1);
}
};
- 쓰고 있는 라이브러리에선 아쉽게도 ref.current를 통해서만 현재 인덱스를 불러오고, 그 인덱스를 갈 수 있다.
- 카드 클릭시 현재 카드를 줄이고, 인덱스가 0이 아닌이상 -1 만큼 이동하게끔 했다.
카드 떨림 오류 해결
문제점) 카드를 넘기다 보면 랜더링 될 때, 카드가 상단으로 살짝 올라갔다 내려오는 현상이 발생.
<script>
function confirmDelete() {
const doIt = confirm('정말 전체 삭제할까요?');
if (doIt) {
// 확인을 누르면 서버에 요청을 보내서 삭제 작업을 수행
deleteAll();
} else {
// 취소를 누르면 아무 작업도 하지 않음
return;
}
}
function deleteAll() {
// JavaScript를 사용하여 서버에 AJAX 요청을 보냄
var xhr = new XMLHttpRequest();
xhr.open("POST", "memberDelAll.php", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// 서버의 응답에 대한 처리 (optional)
console.log(xhr.responseText);
window.location.reload();
}
};
xhr.send();
}
</script>
- 전체삭제에서는 비동기 구문을 사용했습니다.
JavaScript에서 AJAX(Asynchronous JavaScript and XML)를 사용하여 비동기적으로 서버에 데이터를 요청하고 응답을 처리하는 예제입니다.
페이지 전체를 새로고침하지 않고도 서버와 통신하여 데이터를 가져오거나 전송할 수 있습니다.
- var xhr = new XMLHttpRequest();: XMLHttpRequest 객체를 생성합니다. 이 객체를 사용하여 서버와 상호 작용할 수 있습니다.
- xhr.open("POST", "memberDelAll.php", true);: XMLHttpRequest 객체를 초기화합니다. "POST"는 데이터를 서버로 전송할 때 사용되는 HTTP 메서드입니다. 두 번째 매개변수는 요청을 보낼 URL이고, 세 번째 매개변수 true는 비동기적으로 요청을 처리하도록 지정합니다.
- xhr.onreadystatechange = function () {...}: onreadystatechange 이벤트 핸들러를 정의합니다. 이 이벤트는 서버로부터 응답이 도착할 때마다 발생합니다. 응답의 상태가 변경될 때마다 이 함수가 호출됩니다.
if (xhr.readyState == 4 && xhr.status == 200) {...}: readyState가 4이고 status가 200인 경우에만 코드 블록이 실행됩니다. readyState가 4는 서버 응답이 완료되었음을 나타내고, status가 200은 성공적인 응답임을 나타냅니다.
-console.log(xhr.responseText);: 서버의 응답 내용을 콘솔에 출력합니다. 이 부분은 디버깅을 위한 것으로, 실제 애플리케이션에서는 필요에 따라 다른 작업을 수행할 수 있습니다.
-window.location.reload();: 페이지를 새로고침하여 변경 사항을 적용합니다. 새로고침 없이도 페이지의 일부를 업데이트할 수 있지만, 여기서는 삭제 작업이 완료된 후에 페이지를 전체적으로 새로고침하도록 했습니다.