TextInput을 통해 여러 값을 연속으로 입력받고 싶을 때 어떻게 해야될 지 몰라서 인터넷을 찾아보았다.
blurOnSubmit
TextInput 컴포넌트는 기본적으로 submit을 하고나면 blur처리된다.
focus를 잃고 자판이 자동적으로 사라지는데, 그것을 막기 위해서는 blurOnSubmit 속성을 변경해주면 된다.
기본값은 true이며, blurOnSubmit={false}로 바꿔주면 된다.
<TextInput blurOnSubmit={false} />
blurOnSubmit과 useRef를 같이 사용하면 다음 input으로 쉽게 넘어갈 수 있다.
useRef
javascript에서 특정 요소를 selector를 통해 선택했던 것 처럼, react에서도 특정 component를 가리킬 수 있다.
useRef를 사용하면 가능하다.
useRef 사용시 주의점
1. component 속성에 Ref를 지정하고 사용해야 한다.
2. ref변수를 바로 사용할 수 없다. current property를 사용해야 한다.
3. 변경되어도 Component가 다시 랜더링 되지 않는다(useState와 다른점)
아래 코드를 보면 주의점들을 이해할 수 있다.
const refInput = useRef(null);
// useRef를 통해 refInput을 먼저 만든다.
<Input ref={refInput} />
// component에 ref속성으로 지정해준다.
refInput.current.focus();
// refInput.current으로 focus를 이동한다.
여러개의 TextInput이 있을 때, 각각 ref_input을 따로 지정해준다.
blurOnSubmit={false}로 해주지 않으면 키보드가 들어갔다가 다시 나온다고 한다.
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
31
32
|
import React, { useRef } from 'react'
...
const MyFormComponent = () => {
const ref_input2 = useRef();
const ref_input3 = useRef();
return (
<>
<TextInput
placeholder="Input1"
autoFocus={true}
returnKeyType="next"
onSubmitEditing={() => ref_input2.current.focus()}
blurOnSubmit={false}
/>
<TextInput
placeholder="Input2"
returnKeyType="next"
onSubmitEditing={() => ref_input3.current.focus()}
blurOnSubmit={false}
ref={ref_input2}
/>
<TextInput
placeholder="Input3"
ref={ref_input3}
/>
</>
)
}
|
cs |
위와 같이 사용하면 TextInput 3개를 연속으로 입력받을 수 있다.
참고한 사이트
https://reactnative.dev/docs/textinput#bluronsubmit
'React Native' 카테고리의 다른 글
[React Native] 진행바(Progress Bar) 만들기 (0) | 2021.12.28 |
---|---|
expo - custom font 적용하기 (0) | 2021.12.23 |
[expo] 로딩화면/아이콘 설정하기 (0) | 2021.12.17 |
Expo - 로컬에 자료 저장하고 불러오기 + 앱 로딩하면서 불러오기 (0) | 2021.12.17 |
React Native - ScrollView / 스크롤 가능한 목록 만들기 (0) | 2021.12.15 |