-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
앱바 리팩토링 및 네비게이션 개선 #85
base: develop
Are you sure you want to change the base?
Conversation
기존의 코드는 제안 예시const ArrowLeft = ({ onBack }: { onBack?: () => void }) => {
const navigate = useNavigate();
const handleBack = () => {
if (onBack) {
onBack();
} else {
navigate(-1);
}
};
return (
<Button onClick={handleBack}>
<img src={CaretLeftIcon} alt="arrow-left" />
</Button>
);
};
<AppBar leftContent={<ArrowLeft />} />
<AppBar leftContent={<ArrowLeft onBack={() => navigate('/')} />} />
<AppBar leftContent={
<ArrowLeft onBack={() => {
if (window.confirm("정말 나가시겠습니까?")) {
navigate(-1);
}
}} />
} /> 추가물론 변경하신 아래처럼 Screen.Recording.2025-01-31.at.10.38.59.PM.movuseEffect(() => {
console.log('초기 히스토리 길이:', history.length);
}, []);
// 1. history 조작
const handleState = () => {
console.log('조작 전 히스토리 길이:', history.length);
history.pushState({}, '', location.pathname);
console.log('조작 후 히스토리 길이:', history.length);
};
// 2. history 이동 테스트
const handleHistory = () => {
console.log('2. history 이동 실행');
history.length <= 2 ? navigate('/', { replace: true }) : navigate(locate as string);
};
// 3. navigate(-1)
const handleBack = () => {
console.log('3. navigate(-1) 실행');
navigate(-1);
}; 결론
|
이렇게 동작하는 걸 의도하고 만들었습니다
예시로 보여주신 이 방식은 강제로 빈 값을 스택에 채워 넣는 건데 사용자 입장에서 이렇게 사용할 경우는 없다고 생각합니다. |
저도 사용자가 직접 스택을 추가하는 일은 없다는 부분은 동의해요. 다만, 이외에도 웹뷰(WebView), 데스크탑 웹, 모바일 웹 그리고 각 벤더사의 브라우저 별로 length 값이 모든 환경에서 동일하게 동작한다고 보장할 수는 없어요. 브라우저 별 관리 방식 차이로 예상과 다르게 동작할 수 있어요. 즉, 또, locate 방식은 특정 경로로 이동하는 역할을 하지만, 이동 전에 추가적인 처리를 할 수 없어요. 하지만, onBack 방식은 함수를 받을 수 있기 때문에 이동 전에 그리고 백버튼의 기본 동작이 추가로 하민님이 말씀한 안정성인 '페이지 이탈을 막는 것'도 중요한 부분이라고 생각해요. 이전 페이지가 없을 때 다른 사이트로 가는 것보다 저희 서비스의 홈으로 보내는건 정말 좋은 방식이라고 생각해요. 다만 이걸 좀 더 다양한 환경에서도 일관성있게 적용할 방법이 있을지 얘기해보면 좋을 것 같아요. 아래는 참고삼아 네이버 뉴스, 마켓컬리, 당근 채용 사이트의 뒤로가기를 확인한 영상이에요. 첫 번째랑 두 번째는 페이지를 이탈하는 경우이고 세 번째는 이탈하지 않고 특정 페이지로 보내주더라고요. 하민님이 고민하고 작성하신 코드가 세 번째 케이스가 맞나요? Screen.Recording.2025-02-01.at.8.08.53.PM.mov |
#️⃣연관된 이슈
#75
#84
📝작업 내용
이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)
스크린샷 (선택)
기존 : 무조건 이전 페이지로 이동하는 방식
변경 : 디폴트 ( 이전 페이지) / 사용자 지정 시 해당 페이지로 이동 / 이전 페이지 없을 시 뒤로가기 방지 추가
사용방법
검색페이지 앱바 디자인 변경
width : 100%로 변경
검색 페이지만 별도로 앱바를 만드는 건 관리도 힘들어지고 코드도 복잡해질 거 같아 처음 정했던 방식으로 바꿨습니다

navbar와 같은 width로 맞춰져 있어 보기에도 괜찮은 거 같아요!