๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ReactNative

[ReactNative]์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ ์†์„ฑ๊ณผ API

by IworldT 2021. 8. 24.
๋ฐ˜์‘ํ˜•

์ด์ „ ๊ธ€์—์„œ  React Native์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์ด์ „ ๊ธ€(https://iworldt.tistory.com/38) ์„ ์ฐธ๊ณ ํ•˜์ž!

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์˜ ์‚ฌ์šฉ์ž ์ปดํฌ๋„ŒํŠธ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ปดํฌ๋„ŒํŠธ๋“ค์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ์ •์˜ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ํ„ฐ์น˜์™€ ์ œ์Šค์ณ ์ด๋ฒคํŠธ๋„ ์–ป์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์ด ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์˜ API์ด๋‹ค. 


๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํฌ๋„ŒํŠธ, ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ ์†์„ฑ, ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ API

 

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์œ„ํ•œ ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์•Œ์•„๋ณด์ž.

 

Alert API

๋„ค์ดํ‹ฐ๋ธŒ Alert์„ ๋„์›Œ์ฃผ๋Š” API์ด๋‹ค.

import {Alert} from 'react-native'

<Button title="Alert" onPress{ () => Alert.alert('๋ฒ„ํŠผํด๋ฆญ','๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์…จ์Šต๋‹ˆ๋‹ค') } />

Alert์„ importํ•˜์—ฌ Alert์˜ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์ธ alert์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿผ ํ™”๋ฉด์— ์ œ๋ชฉ์€ '๋ฒ„ํŠผํด๋ฆญ'์ด๊ณ  ๋‚ด์šฉ์€ '๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์…จ์Šต๋‹ˆ๋‹ค'์ธ ์•Œ๋ฆผ์ฐฝ์ด ์กด์žฌ๋‚˜ํƒ€๊ณ , OK(ํ™•์ธ)๋ฒ„ํŠผ๋„ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚œ๋‹ค.

 

Button ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ

<Button title="press me" 
	onPress={ () => console.log("pressed!") } 
	color="yellow"
	accessibilityLabel="Press this button"
/>

ํ„ฐ์น˜ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.

title์€ ํ•„์ˆ˜ ์†์„ฑ์œผ๋กœ ๋ฒ„ํŠผ์— ๋ณด์—ฌ์งˆ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.

onPress๋Š” HTML์˜ onClick๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๊ฒ ๋‹ค. onPress๋Š” ๊ฐ’์œผ๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๋‘ ๊ฐ€์ง€๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ ํ™”์‚ดํ‘œํ•จ์ˆ˜๋‚˜ function์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์–ด๋„ ๋˜๊ณ (์ผํšŒ์„ฑ ์ฝœ๋ฐฑํ•จ์ˆ˜์ผ ๋•Œ), ํ•จ์ˆ˜๋ช…์„ ( ) ์—†์ด { }์•ˆ์— ์ ์–ด๋„ฃ์–ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

color๋Š” ๋ฒ„ํŠผ์˜ ์ƒ‰ ์†์„ฑ์ด๋‹ค.

accessibilityLabel์€ react native ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด "It is recommended to set accessibilityLabel to help make your app usable by everyone." ๋ผ๊ณ  ๋‚˜์™€์žˆ๋‹ค. ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์„ค๋ช… ๋ผ๋ฒจ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๋ฒ„ํŠผ์€ ์œ„ ์†์„ฑ๊ฐ’๋“ค์—์„œ ๋ณด๋‹ค์‹œํ”ผ ์Šคํƒ€์ผ๊ณผ ๋””์ž์ธ์— ์œตํ†ต์„ฑ์ด ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด Touchable ํ„ฐ์ฒ˜๋ธ” ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์ด๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ์™€ ๋‹ค๋ฅธ ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ„ฐ์ฒ˜๋ธ” ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ์‹ธ ์ด๋ฒคํŠธ๊ฐ€ ์ ์šฉ๋˜๋„๋ก ํ•œ๋‹ค.

 

์•„๋ž˜์˜ ํ„ฐ์ฒ˜๋ธ” ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์‹œ๊ฐ์  ํšจ๊ณผ์ด๊ธฐ์— ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ํ™•์ธํ•˜๋ฉด ๋” ์ข‹์„๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋•Œ ๊ทธ๋•Œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹œํ—˜ํ•ด๋ณด๊ธด ์–ด๋ ค์šธ ๊ฒƒ์ด๋ฏ€๋กœ, ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๊ฐ•์ถ”ํ•œ๋‹ค.

https://reactnative.dev/docs/touchablehighlight

 

TouchableHighlight · React Native

If you're looking for a more extensive and future-proof way to handle touch-based input, check out the Pressable API.

reactnative.dev

https://reactnative.dev/docs/touchableopacity

 

TouchableOpacity · React Native

If you're looking for a more extensive and future-proof way to handle touch-based input, check out the Pressable API.

reactnative.dev

https://reactnative.dev/docs/textinput

 

TextInput · React Native

A foundational component for inputting text into the app via a keyboard. Props provide configurability for several features, such as auto-correction, auto-capitalization, placeholder text, and different keyboard types, such as a numeric keypad.

reactnative.dev

์›น ๋‚ด์— EXPO ๋ชจ๋“ˆ์„ ์‚ฝ์ž…ํ•ด๋‘์—ˆ๋‹ค. ์›น์—์„œ๋„ ์‰ฝ๊ฒŒ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋Œ๋ ค๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ผญ ์ž‘๋™์„ ํ™•์ธ ํ•ด ๋ณด์ž.

 

 

TouchableHighlight ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ„ฐ์น˜๋  ๋•Œ ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ๋‚ด๊ฐ€ ์ฐธ๊ณ ํ•˜๊ณ  ์žˆ๋Š” ๋„์„œ์— ๋”ฐ๋ฅด๋ฉด, ๋ฒ„ํŠผ์ด๋‚˜ ์›น์˜ ๋งํฌ๊ฐ€ ๋˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์š”์†Œ์— ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

TouchableOpacity ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ„ฐ์น˜๋  ๋•Œ ์ปดํฌ๋„ŒํŠธ ๋ฐ”ํƒ•์ƒ‰์˜ ํˆฌ๋ช…๋„๋ฅผ ๋ฐ”๊ฟ” ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์œ„์™€ ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฐ€ ์‹ถ๊ฒ ์ง€๋งŒ ํ™•์ธํ•ด๋ณด๋ฉด ๊ฝค ์ฐจ์ด๊ฐ€ ๋šœ๋ ทํ•˜๋‹ˆ ์•„๊นŒ ์–ธ๊ธ‰ํ•œ ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ ์‚ฌ์ดํŠธ์—์„œ ๋ฒ„ํŠผ์„ ํ•œ๋ฒˆ ๊ผญ ํด๋ฆญํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.

 

์˜ˆ์ œ

<TouchableHighlight onPress={/*์ฝœ๋ฐฑํ•จ์ˆ˜*/} onPressOut={/*์ฝœ๋ฐฑํ•จ์ˆ˜*/} onLongPress={/*์ฝœ๋ฐฑํ•จ์ˆ˜*/}>
	<Text>Highlist</Text>
</TouchableHighlight>

<TouchableOpacity onPress={/*์ฝœ๋ฐฑํ•จ์ˆ˜*/} onPressOut={/*์ฝœ๋ฐฑํ•จ์ˆ˜*/} onLongPress={/*์ฝœ๋ฐฑํ•จ์ˆ˜*/}>
	<Text>Opacity</Text>
</TouchableOpacity>

 

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์†์„ฑ์ด ์กด์žฌํ•œ๋‹ค.

 

๋ง๊ทธ๋Œ€๋กœ onPress๋Š” ํ„ฐ์น˜๋˜์—ˆ์„ ๋•Œ, onPressIn์€ ํ„ฐ์น˜ ๋˜๊ธฐ ์ „ ์ƒํƒœ์ผ ๋•Œ, onPressOut์€ ํ„ฐ์น˜ ํ›„์— ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.

 

TextInput ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๊ณต์‹ ๋ฌธ์„œ ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋‹ค. ๋ง๊ทธ๋Œ€๋กœ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋Š”, HTML์˜ input์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. 

 

Do it! ์ฑ…์—์„œ ์ด์ •๋ฆฌํ•œ TextInput ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ์˜ ํŠน์ง•์„ ์ž‘์„ฑํ•ด๋ณด๊ฒ ๋‹ค.

1. defaultValue ์†์„ฑ์œผ๋กœ ์ดˆ๊นƒ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

2. ์ž…๋ ฅํ•œ ๊ฐ’์„ value ์†์„ฑ์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

3. ํ…์ŠคํŠธ ์ž…๋ ฅ ์‹œ onChangeText ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

4. placeholder๋กœ ์–ด๋–ค ๊ฐ’์„ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

5. editable์€ ์ž…๋ ฅ ๊ฐ€๋Šฅ/๋ถˆ๊ฐ€๋Šฅ์„ true/false๋กœ ์…‹ํŒ…ํ•œ๋‹ค

6. keyboardType ์†์„ฑ์— 'default', 'numeric', 'email-address'๋“ฑ์˜ ํฌ๋งท์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

7. onFocus/onBlur๋กœ ํฌ์ปค์Šค๊ฐ€ ์žˆ๋Š” ์ƒํƒœ/์—†๋Š” ์ƒํƒœ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

8. ํ…์ŠคํŠธ ์ž…๋ ฅ์ด ๋๋‚˜๋ฉด(Enter์ž…๋ ฅ ๋“ฑ) onEndEditing ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

9. ์ž์‹ ์š”์†Œ๊ฐ€ ์—†๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ฌด์ฒ™ ๊ธฐ๋ณธ์ ์ธ ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋“ค๊ณผ ๊ทธ์˜ ์ด๋ฒคํŠธ ์†์„ฑ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ์•„์ง ๊ฐˆ ๊ธธ์ด ๋ฉ€๋‹ค !

 

๋ณธ๋ฌธ์—์„œ ์ž์ฃผ ์–ธ๊ธ‰ํ•˜๋Š” ์ฐธ๊ณ ๋„์„œ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

https://iworldt.tistory.com/27

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€