inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] React로 NodeBird SNS 만들기

이벤트 위임이 되는 것 같은데 될 이유가 없어보입니다

256

김지원

작성한 질문수 5

0

이 코드에 있는 input에서 입력하고 엔터를 입력하면 이벤트 위임이 되는 듯 등록이 두번됩니다. 그래서  e.stopPropagation();  를 이용하여 해결하려 했는데 여전히 입력이 두번씩 됩니다.. 이게 제일 최하위 컴포넌트인데 도저히 에러를  못잡겠어서 질문드립니다. 심지어 e.target.value=""로 마지막에 입력값을 지우는 코드를 집어넣으면 첫 입력이 하크 였으면 뒤에글자인 크가 한번 더 입력됩니다. (첫번쨰 입력: 하크 두번쨰 입력: 크) 대체 왜이러는걸까요..?? 항상 답변 잘 해주셔서 감사합니다 제로초님

return (
<TodoTagDiv>
<TagTextInput>
<input
onKeyDown={onInputTag}
ref={tagNameInput}
placeholder='태그 이름과 배경색 글자색을 입력하시고 엔터를 눌러주세요!'
/>
<div>
{tags.map((item) => (
<span key={item.id}>{item.tagName}</span>
))}
</div>
</TagTextInput>
<ColorDiv>
<Input value={tagBGColor} onChange={onChangeTagBGColor} type='color' bordered={false} />
<span>배경색</span>
</ColorDiv>
<ColorDiv>
<Input value={tagTextColor} onChange={onChangeTagFontColor} type='color' bordered={false} />
<span>글자색</span>
</ColorDiv>
</TodoTagDiv>
);
const onInputTag = useCallback(
(e) => {
e.stopPropagation();
e.nativeEvent.stopImmediatePropagation();
if (e.key === 'Enter' && e.target.value) {
e.preventDefault();
console.log(e.target.value);
setTagName(e.target.value);
onChangeTags({
id: uuid(),
createdAt: new Date(),
tagName: tagName,
tabBGColor: tagBGColor,
tagTextColor: tagTextColor,
});
}
},
[tagName, tagBGColor, tagTextColor, onChangeTags]
);

express react nodejs redux Next.js

답변 1

0

제로초(조현영)

음, 해당 태그가 form 태그 안에 있나요? 또한 키보드를 입력할 때 onKeyDown이나 이런 게 두 번씩 실행되나요? input을 저렇게 쓰는 방식은 제가 익숙한 방식이 아니라서 잘 모르겠습니다. 저는 value랑 onChange를 state 연결하는 controlled 방식만 써서요.

0

김지원

네 form 태그 안에 있습니다. 키보드를 입력할떄는 onkeydown이벤트밖에 실행이 안됩니다.. 

저도 제로초님이 말씀하신 value랑 onchange를 컨트롤하는 방식이 편한데 엔터키를 이용한 이벤트를 주고 싶은데 그냥 onChange에서 입력키를 다루는 게 좋을까요?

0

제로초(조현영)

value랑 onChange를 쓰면 값이 state에 등록되니까, onKeyDown에서는 그 state를 쓰시고 e.target.value를 쓰지 마세요.

그리고 혹시 enter 입력할 때 form의 onSubmit도 실행되는건 아니죠?

0

김지원

그리고 혹시 enter 입력할 때 form의 onSubmit도 실행되는건 아니죠?

e.preventDefault()로 막아놓았습니다. 혹시 이게 문제를 발생시킬 수 있나요? 

value랑 onChange를 쓰면 값이 state에 등록되니까, onKeyDown에서는 그 state를 쓰시고 e.target.value를 쓰지 마세요.

이렇게 해보겠습니다

0

김지원

value랑 onChange를 쓰면 값이 state에 등록되니까, onKeyDown에서는 그 state를 쓰시고 e.target.value를 쓰지 마세요.

이렇게 해도 두번씩 입력되는 문제는 반복됩니다. 상위 컴퍼넌트에서 props로 주는 onChange를 onKeydown에서 쓰고 있는데 이걸로 문제가 발생할수도 있을까요?

0

제로초(조현영)

e.preventDefault()로 막는게 맞는 것 같습니다.

혹시 맥 같은 거 쓰시나요? 한글 입력 관련 버그는 아니죠? onKeyDown 떼어내고 value랑 onChange만 있을 때는 두번씩 입력도는 현상이 나타나나요?

0

김지원

맥쓰고 있긴합니당

아뇨 onkeydown없으면 안나타납니다! 

의심되는 건 currntvalue를 지웠을 때는 뒤에문자하나만 두번째로 입력되는건데 value가 맘대로 의도한바와 다르게 움직이는 것 같습니다

0

제로초(조현영)

그러면 keydown이 원인인건 맞네요. 거기서 코드를 하나씩 주석처리해서 원인을 찾아보세요.

0

제로초(조현영)

폼이 원치않을때 리렌더링되면서 글자가 두 번 쳐질 수 있습니다.

0

김지원

keyPress로 바꿔서 해결했습니다 ㅎㅎ keydown이 왜 그런지는 사실 아직 못찾았습니다...

넥스트 버젼 질문

0

90

2

로그인시 401 Unauthorized 오류가 뜹니다

0

104

1

무한 스크롤 중 스크롤 튐 현상

0

192

1

특정 페이지 접근을 막고 싶을 때

0

116

2

createGlobalStyle의 위치와 영향범위

0

102

2

인라인 스타일 리렌더링 관련

0

97

2

vsc 에서 npm init 설치시 오류

0

157

2

nextjs 15버전 사용 가능할까요?

0

166

1

화면 새로고침 문의

0

129

1

RTK에서 draft, state 차이가 있나요?

0

160

2

Next 14 사용해도 될까요?

0

455

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

359

1

url 오류 질문있습니다

0

214

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

391

1

sudo certbot --nginx 에러

0

1293

2

Minified React error 콘솔에러 (hydrate)

0

477

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

255

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

337

1

npm run build 에러

0

525

1

front 서버 npm run build 중에 발생한 에러들

0

399

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

350

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

290

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

249

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

206

1