inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

(7.1) 포스트 추가 UI 구현하기

모달 UI 관련 질문

84

keeenco

작성한 질문수 3

0

image.png

이렇게 내용이 길어져서 모달 전체 크기인 max-h-[90vh]에 도달할 경우, 저는 모달 내부에 있는 버튼이 밖으로 안튀어나가게 작동할거라고 예상했는데, 첨부한 이미지처럼 튀어나가더라고요...이런 경우는 어떻게 해결할 수 있나요?

react typescript react-query supabase zustand

답변 1

0

이정환 Winterlood

안녕하세요 keenco님 이정환입니다.

이런 경우 모달내부 요소의 CSS 속성에 overflow-scroll 등을 추가해 스크롤바를 통해 해결할 수 있습니다. 강의에서도 아래에 보이시는 것 처럼 스크롤바를 통해 해결했으니 강의 코드를 참고해보셔도 좋을 것 같습니다 😀

image.png

 

0

keeenco

감사합니다!!

0

keeenco

DialogContent와 textarea 여기저기 다 overflow-scroll을 추가해봤으나 해결되지 않는데 어디에 추가하신건지 자세히 알려주실 수 있을까요..?ㅠㅠ 제공해주신 코드와 diff checker까지 사용해봤으나 제가 다르게 입력한 부분을 못찾겠습니다..!!

(+ 같은 코드로 다른 모니터 환경에서는 강의처럼 정상 작동합니다. 노트북(권장사항인 120%배율)환경에서 이런거같은데, 잘못 작성된 코드가 아니라면 이런경우를 어떻게 대처하나요? 반응형으로 보완해줘야할까요? )

import { ImageIcon } from "lucide-react";
import { Button } from "../ui/button";
import { Dialog, DialogContent, DialogTitle } from "../ui/dialog";
import { usePostEditorModal } from "@/store/post-editor-modal";
import { useEffect, useRef, useState } from "react";
import { toast } from "sonner";
import { useCreatePost } from "@/hooks/mutations/post/use-create-post";

export default function PostEditorModal() {
  const { isOpen, close } = usePostEditorModal();
  const { mutate: createPost, isPending: isCreatePostPending } = useCreatePost({
    onSuccess: () => {
      close();
    },
    onError: (error) => {
      toast.error("포스트 생성에 실패했습니다. 다시 시도해주세요.", {
        position: "top-center",
      });
    },
  });

  const [content, setContent] = useState("");
  const textareaRef = useRef<HTMLTextAreaElement>(null);

  const handleCloseModal = () => {
    close();
  };

  const handleCreatePostClick = () => {
    if (content.trim() === "") return;
    createPost(content);
  };

  useEffect(() => {
    if (textareaRef.current) {
      textareaRef.current.style.height = "auto";
      textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;
    }
  }, [content]);

  useEffect(() => {
    if (!isOpen) return;
    textareaRef.current?.focus();
    setContent("");
  }, [isOpen]);

  return (
    <Dialog open={isOpen} onOpenChange={handleCloseModal}>
      <DialogContent className="max-h-[90vh]">
        <DialogTitle>포스트 작성</DialogTitle>
        <textarea
          disabled={isCreatePostPending}
          ref={textareaRef}
          value={content}
          onChange={(e) => setContent(e.target.value)}
          className="max-h-125 min-h-25 focus:outline-none"
          placeholder="무슨 일이 있었나요?"
        />
        <Button
          disabled={isCreatePostPending}
          variant="outline"
          className="cursor-pointer"
        >
          <ImageIcon />
          이미지 추가
        </Button>
        <Button
          disabled={isCreatePostPending}
          onClick={handleCreatePostClick}
          className="cursor-pointer"
        >
          저장
        </Button>
      </DialogContent>
    </Dialog>
  );
}

회원가입 구현 (구현 후 최종 화면 출력 X)

0

64

2

(6.11) 회원가입시 프로필 정보 자동 생성하기 Q. 호출 순서 문의

0

56

1

명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이

0

55

2

useMutation 적용 후 새로운 글 등록시 content가 안보여요

0

69

2

6.8 zustand 세션 질문입니다.

0

109

2

next.js 강의에서도 리액트 라이브러리들을 다뤄주시나요?

0

92

2

shadcn에서 radix ui와 base ui 차이는 뭔가요?

1

403

2

updateTodo 함수 생성시 화살표 함수 사용 안하는 이유

0

84

2

4.11 바로 투두 삭제가 안됨 질문

0

102

3

매개변수 updatedTodo 관련 질문

0

79

3

인증 정보가 만료되었을 때 라우트 가드 처리가 궁금합니다!

0

91

2

supabase를 사용하지 않을 경우 세션 데이터의 변경을 감지하고 스토어에 보관하는 방법이 궁금합니다!

0

85

2

4.6 id를 string으로 변경시 오류

0

74

2

리액트 타입스크립트 관련 질문있습니다.

0

71

1

소셜 로그인 구현하기 관련하여 질문이 있습니다!

0

108

2

ui 파일 질문드립니다.

0

90

1

tanstack query devtools에서 질문있습니다!

0

75

2

댓글 삭제 시 isPending 질문

0

72

2

두번째 예외상황에 대해 질문있습니다!

0

69

1

리액트 쿼리 질문입니다

1

83

2

개발자도구에서 components 가 안보입니다.

0

108

3

state 관리에 대한 정리

0

88

3

[(2.4) Shadcn/ui를 소개합니다] 강의 Shadcn 세팅 관련 질문 있습니다.

0

210

3

like 테이블에서 왜 create_at이 필요한지 궁금합니다.

0

87

1