사과먹는중
당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • emotion
  • 배포
  • refreshtoken
  • ssg
  • javascrpit
  • 코딩
  • 팀프로젝트
  • 배열
  • next.js
  • JS
  • javascript
  • 팀플
  • react
  • React-hook-form
  • 리액트
  • typescript
  • 코딩 부트캠프
  • 코드캠프
  • 회고
  • HTML
  • graphql
  • 공통 컴포넌트
  • 부트캠프
  • algorithm
  • 자바스크립트
  • CSS
  • 프로그래머스
  • 알고리즘
  • 프론트엔드
  • 팀 프로젝트

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니
프론트엔드✏️/코드캠프

[문제 해결] toast-ui 디폴트 밸류, 수정할 때 빈값 들어가는 문제, 랜딩 페이지 엔터쳐서 넘어가기

프론트엔드✏️/코드캠프

[문제 해결] toast-ui 디폴트 밸류, 수정할 때 빈값 들어가는 문제, 랜딩 페이지 엔터쳐서 넘어가기

2022. 6. 23. 13:38
728x90
반응형

 

 

export default function BeanMarketEditPage() {
  const [isEdit, setIsEdit] = useRecoilState(isEditState);

  const router = useRouter();

  const { data, loading } = useQuery(FETCH_USED_ITEM, {
    variables: {
      useditemId: router.query._id,
    },
  });

  useEffect(() => {
    setIsEdit(true);
  }, [isEdit]);
  return loading ? "" : <BeanmarketWrite data={data} />;
}

1. toast ui에 디폴트 밸류가 안 들어옴

2. form 써서 data보내니까 수정하지 않은 부분은 빈 값이 되어서 수정이 됨

 

두 가지 문제가 있었는데, 왜 지각했냐고 찾아오신 사과님 덕분에 해결^^* 아싸 

 

 

 1. 일단 default value를 받아오기 전에 렌더링이 돼서 문제임. 해결하기 위해선 edit page 최상위 컴포넌트에서 fetch로 data 받아올 때, loading도 같이 받는다. loading 상태일 땐 ""를, 로딩이 아닐때(끝났을 때) Write 컴포넌트를 반환한다.

 

 2. setValue로 데이터를 강제로 넣어준다. 

 useEffect(() => {
    setValue("name", props.data?.fetchUseditem?.name);
    setValue("remarks", props.data?.fetchUseditem?.remarks);
    setValue("price", props.data?.fetchUseditem?.price);
  }, []);

presenter 에서 useEffect로 data에서 받아온 정보들을 넣어주면 된다. 

 

 


 

useEffect(() => {
    // 클릭해서 넘어가는 거 해야함
    const handleKey = (event) => {
      if (location.pathname !== "/") return;
      if (event.key === "Enter" || event.key === "Click") {
        router.push("/boards/main");
      }
    };
    // window.aaa = "fff";
    window.addEventListener("keydown", handleKey);
  }, []);

클릭 또는 엔터를 쳤을 때 넘어가게 하고 싶었다.

클릭했을 때 넘어가는 건 실제로 많이 쓰이고, 이미지 누르면 onClick에 함수를 바인딩 하면 되는 거라 좀 더 간단하다.

나는 엔터를 치는게 더 쉬울줄 알고(?) 이렇게 한건데... 아무튼 페이지가 잘 넘어가긴 하는데 window.addEventListener라서 어떤 페이지에서든 엔터만 치면 boards/main으로 넘어가는 문제가 발생했다.

 

 그래서 멘토님이 처음엔 location.pathname을 찍어보시곤, 이 페이지에서만 작동하도록 하게끔 해주셨다. 

그러나 이건 addEventListener가 사라지지 않고 계속 키다운이 일어날때 마다 이벤트를 받는다는 문제가 있다. 

그래서 그 후에 remove를 해주면 될 것 같다고 하셔서 혼자 해봤다.

 

  useEffect(() => {
    const handleKey = (event) => {
      if (event.key === "Enter" || event.key === "Click") {
        window.removeEventListener("keydown", handleKey);
        router.push("/boards/main");
      }
    };
    window.addEventListener("keydown", handleKey);
  }, []);

그리고 내 코드에서 event.key === "Click"은 작동 안 하는 것 같다..ㅎㅎ 아무리 클릭해도 넘어가지진 않음.

일단 마우스는 key로 보지 않는 것 같다. 마우스는  mouse event가 따로 있다. (지금은 event.key === "Click" 부분 지웠음)

어쨌든.... 엔터쳐서 넘어가기 성공!  

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글

[문제...] react-hook-form, 엔터치면 뮤테이션이 날아감  (0) 2022.06.23
[문제 해결] Warning: Failed prop type: The prop `children` is marked as required in `InfiniteScroll`, but its value is `undefined`.  (2) 2022.06.23
알고리즘 - 3진법 뒤집기, 2진 변환 반복  (0) 2022.06.23
220622 프론트엔드 부트캠프 43일차 : Memoization, @media(반응형 페이지), 토스트 에디터  (0) 2022.06.22
[문제] Do not add <script> tags using next/head 노랗고 긴 에러창 없애기  (0) 2022.06.22
    '프론트엔드✏️/코드캠프' 카테고리의 다른 글
    • [문제...] react-hook-form, 엔터치면 뮤테이션이 날아감
    • [문제 해결] Warning: Failed prop type: The prop `children` is marked as required in `InfiniteScroll`, but its value is `undefined`.
    • 알고리즘 - 3진법 뒤집기, 2진 변환 반복
    • 220622 프론트엔드 부트캠프 43일차 : Memoization, @media(반응형 페이지), 토스트 에디터
    당근먹는하니
    당근먹는하니

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.