Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- next.js
- Algorithm
- TypeScript
- 투포인터
- 스택
- NextAuth
- typscript
- aws lightsail
- 슬라이딩윈도우
- never타입
- 해쉬
- react
- 라이프사이클
- styled-components
- textarea autosize
- react-query
- isNaN
- JavaScript
- 버블정렬
- 알고리즘
- tailwindcss
- cookie
- nextjs
- 빅오
- nestjs
- 큐
- 그리디
- 정렬
- 블로그만들기
- js알고리즘
Archives
- Today
- Total
far
[React] input에서 한 글자 입력 후 포커싱이 풀리는 현상 본문
특정 값에 따라서 서로다른 input엘리먼트가 보이는 컴포넌트를 만들던 도중, 한 글자를 입력 할 때 마다 input의 포커싱이 풀리는 현상이 나타났다.
대체 왜 그런가 했더니 테스트용으로 외부에 만들어뒀던 Input 컴포넌트가 스코프 내부에 들어있었다.
import React, { useState } from 'react';
const App = () => {
const [inputValue, setInputValue] = useState('');
const InputComponent = () => (
<input
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
);
return (
<div>
<label>input label</label>
<InputComponent /> {/* 이 컴포넌트는 App 컴포넌트가 리렌더링될 때마다 새로 생성됨 */}
</div>
);
}
export default App;
위의 코드는 내 코드를 간소화한 예시코드인데, 위와 같이 짜게 되면 App 컴포넌트가 리렌더링 될 때, 내부의 InputComponent를 새 컴포넌트로 인식해서 리렌더링을 하기 때문이다.
import React, { useState } from 'react';
const InputComponent = ({ value, onChange }) => (
<input
value={value}
onChange={onChange}
/>
);
const App = () => {
const [inputValue, setInputValue] = useState('');
return (
<div>
<h1>Type Something</h1>
<InputComponent
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
</div>
);
}
export default App;
해결법은 위와 같이 InputComponent를 App 컴포넌트 외부로 분리시키면 재생성이 되지 않기 때문에 필드의 포커스가 유지된다.
'React > 기록' 카테고리의 다른 글
[React + websocket] Sock.js와 Stomp.js로 간단한 채팅 구현하기 (0) | 2023.04.28 |
---|---|
[React + Typescript] Modal창 만들기 (+ 스크롤 고정) (0) | 2023.04.18 |
[React] Checkbox와 API연결하기 (첫 클릭시 Boolean 전환 안되는 현상 해결) (0) | 2023.04.15 |
[React + Typescript] Intersection Observer로 간단한 스크롤 애니메이션 만들기 (텍스트 가로 이동, Fade In/Out) (0) | 2023.03.30 |
[React] Key에 대하여 (Map의 key props) (0) | 2023.03.15 |
Comments