์ด์ ๊ธ์์ 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
https://reactnative.dev/docs/touchableopacity
https://reactnative.dev/docs/textinput
์น ๋ด์ 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. ์์ ์์๊ฐ ์๋ค. |
์ด๋ ๊ฒ ๋ฌด์ฒ ๊ธฐ๋ณธ์ ์ธ ์ฝ์ด ์ปดํฌ๋ํธ๋ค๊ณผ ๊ทธ์ ์ด๋ฒคํธ ์์ฑ๋ค์ ๋ํด ์์๋ณด์๋ค. ์์ง ๊ฐ ๊ธธ์ด ๋ฉ๋ค !
๋ณธ๋ฌธ์์ ์์ฃผ ์ธ๊ธํ๋ ์ฐธ๊ณ ๋์์ ๋ํ ๋ด์ฉ์ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์๋ค.
๋๊ธ