inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Slack 클론 코딩[실시간 채팅 with React]

이미지 드래그 업로드하기

onDragLeave 이벤트

609

성창수

작성한 질문수 14

0

onDragOver를 통해서 화면 안으로 파일을 넣으면 업로드라는 문자가 뜨는데 다시 파일을 밖으로 꺼내도 업로드! 라는 화면이 계속 떠 있더라구요

그래서 onDragLeave를 사용하여 dragover를 false로 만들어줘서 해결하긴 했는데, onDragOver만 사용했을 때는 업로드! 화면이 깜빡이지 않았는데, onDragLeave를 같이 사용하니까 업로드! 화면이 마우스를 움직일 때마다 깜빡이면서 채팅창 부분이 리렌더링 되는데, 더 효율적인 방법이 있을까요??

const DM = () => {	
const [dragOver, setDragOver] = useState(false);
const onDragOver = useCallback((e: any) => {
	e.preventDefault();
	setDragOver(true);
}, []);

const onDragLeave = useCallback((e: any) => {
	e.preventDefault();
	setDragOver(false);
}, []);

if (!userData || !myData) {
  return null;
}

// useSWRInfinite가 2차원 배열이기 때문에  1차원 배열로 만들어서 reverse를 해준다.
const chatSections = makeSection(chatData ? [...chatData].flat().reverse() : []);

return (
 <Container onDrop={onDrop} onDragOver={onDragOver} onDragLeave={onDragLeave}>
  <Header>
   <img src={gravatar.url(userData.email, { s: '24px', d: 'retro' })} alt={userData.nickname} />
   <span>{userData.nickname}</span>
  </Header>
  {/* chatData => 채팅을 DM에 표시해주기 위함 */}
  <ChatList
    chatSections={chatSections}
    ref={scrollbarRef}
    isEmpty={isEmpty}
    isReachingEnd={isReachingEnd}
    setSize={setSize}
  />
  <ChatBox chat={chat} onChangeChat={onChangeChat} onSubmitForm={onSubmitForm} />
   {dragOVer && <DragOVer>업로드!</DragOVer>}
   </Container>
	);
};

export default DM;

코드는 해당되는 부분만 적었습니다.

Socket.io 웹팩 socket.io babel react 클론코딩 typescript 클론코딩

답변 1

0

제로초(조현영)

React.memo를 적극 도입하는 수밖에 없어보입니다.

0

성창수

넵 감사합니다 한번 시도해보겠습니다!

기본 셋팅과 관련하여

0

92

1

초기 셋팅 back과 front만 남겨두고 다 지운 후 진행 방법

0

96

2

focus 시에만 화면 업데이트 되는 이유 + 해결방법

0

150

2

useEffect 개수 관리

0

110

2

라이브러리 서치 방법

0

104

2

함수 정의 패턴

0

77

1

npm run dev 에러

0

152

3

npx webpack 후 에러

0

178

2

'void' 형식 식의 truthiness를 테스트할 수 없습니다.ts(1345)

0

144

2

사용자 가입시 에러발생 (TypeError: Cannot read properties of null (reading 'addMembers')

1

178

2

초기세팅중 packge.json 에러떠요

0

157

2

CORS - Access-Control-Allow-Origin 누락 문제

0

431

3

로그인 페이지 무한 새로고침 현상

0

598

2

Module not found: Error: Can't resolve './App' 에러

0

959

1

배포 방법

0

298

2

npm run dev 시 빌드가 매우 느려졌습니다

0

990

2

alias 경로 설정 오류

0

452

2

fetcher 함수의 data 값이 두번 찍히는 이유

0

278

1

제네릭 질문

0

218

2

ts-node 대신 tsx 사용여부

0

373

1

배포 관련 질문

0

247

1

[nginx + https] 서비스를 실행하면 niginx가 아닌 서비스 화면을 보여주게 하고 싶습니다.

0

385

2

[배포하기] webpack에 aws 퍼블릭 IPv4 주소 와 포트 주소를 작성하고 나서 빌드후 실행하면 오류가 발생합니다.

0

336

1

users 호출 시 쿠키가 담기지 않는 이슈 질문드립니다.

0

247

2