๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

[React Native] 02-4 ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฒคํŠธ ์†์„ฑ ์ดํ•ดํ•˜๊ธฐ ๋ณธ๋ฌธ

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[React Native] 02-4 ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฒคํŠธ ์†์„ฑ ์ดํ•ดํ•˜๊ธฐ

adorableco 2023. 8. 5. 03:33
๋ฐ˜์‘ํ˜•

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋Œ€ํ™”์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ


๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ

import react from 'react';
import {SafeAreaView, Alert, Button} from 'react-native';

export default function App() {
  return (
    <SafeAreaView>
      <Button
        title="Home"
        onPress={() => Alert.alert('home pressed.', 'message')}
      />
    </SafeAreaView>
  );
}
  • Button ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋Š” onPress ์†์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. โžก๏ธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•จ.
    • <Button onPress = {์ฝœ๋ฐฑ_ํ•จ์ˆ˜}>
      • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ํ˜•ํƒœ : () => {/* ํ•จ์ˆ˜ ๋ชธํ†ต */}
  • ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋Š” Alert API (Application Programming Interface) ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    • Alert API ๊ฐ€ ์ œ๊ณตํ•˜๋Š” alert ์ •์  ๋ฉ”์„œ๋“œ : static alert(ํƒ€์ดํ‹€, ๋ฉ”์‹œ์ง€)
    • ์œ„์˜ ์ฝ”๋“œ์—์„œ onPress={() => Alert.alert('home pressed.', 'message')} ๋Š” ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

 


ํ„ฐ์ฒ˜๋ธ” ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ

  • Button ์˜ ๋””์ž์ธ์— ์œตํ†ต์„ฑ์ด ์—†๋‹ค๋Š” ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ํ„ฐ์ฒ˜๋ธ” ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ง•

1) ์ปดํฌ๋„ŒํŠธ ์˜์–ด์— ํ„ฐ์น˜๊ฐ€ ์ผ์–ด๋‚˜๋ฉด onPress ์ด๋ฒคํŠธ ์†์„ฑ์— ์„ค์ •๋œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

2) ๋‹จ ํ•œ ๊ฐœ์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

TouchableOpacity ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Text ์ปดํฌ๋„ŒํŠธ๋ฅผ Button ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ์˜ˆ

import react from 'react';
import {SafeAreaView, Alert, Button} from 'react-native';
import {TouchableOpacity, TouchableHighlight, Text} from 'react-native';

const onPress = () => Alert.alert('home pressed.', 'message');

export default function App() {
  return (
    <SafeAreaView>
      <Button title="home" onPress={onPress} />
      <TouchableOpacity onPress={onPress}>
        <Text>TouchableOpacity</Text>
      </TouchableOpacity>
      <TouchableHighlight onPress={onPress}>
        <Text>TouchableHighlight</Text>
      </TouchableHighlight>
    </SafeAreaView>
  );
}

โœ… Text ์ปดํฌ๋„ŒํŠธ๋„ onPress ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ๋ฒ„ํŠผ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. โžก๏ธ Button ๊ณผ ํ„ฐ์ฒ˜๋ธ” ์ปดํฌ๋„ŒํŠธ์™€ ๋‹ฌ๋ฆฌ ํ„ฐ์น˜ํ–ˆ์„ ๋•Œ ์‹œ๊ฐ ํšจ๊ณผ๊ฐ€ ์ „ํ˜€ ์—†์Œ.

ex) <Text onpress={onPress}>Press Me</Text>


 

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

import {TextInput} from 'react-native'
  • ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ ์ž ํ•  ๋•Œ TextInput ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํŠน์ง•

1) ์ž์‹ ์š”์†Œ๋ฅผ ๊ฐ€์ง€์ง€ ๋ชปํ•œ๋‹ค.

2) ํฌ์ปค์Šค๋ฅผ ๊ฐ€์ง€๊ฒŒ ํ•˜๋Š” focus ๋ฉ”์„œ๋“œ์™€ ํฌ์ปค์Šค๋ฅผ ์žƒ๊ฒŒ ํ•˜๋Š” blur ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.

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

4) ํ…์ŠคํŠธ ์ž…๋ ฅ์ด ๋ชจ๋‘ ๋๋‚˜๋ฉด onEndEditing ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

โœ… onFocus, onBlur, onEndEditing ์—๋Š” ์•„๋ฌด๋Ÿฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.

 

 

Text์™€ TextInput ์„ ์ถ”๊ฐ€ํ•œ App.tsx

import react from 'react';
import {SafeAreaView, Alert, Button, TextInput} from 'react-native';
import {TouchableOpacity, TouchableHighlight, Text} from 'react-native';

const onPress = () => Alert.alert('home pressed.', 'message');

export default function App() {
  return (
    <SafeAreaView>
      <Button title="home" onPress={onPress} />
      <TouchableOpacity onPress={onPress}>
        <Text>TouchableOpacity</Text>
      </TouchableOpacity>
      <TouchableHighlight onPress={onPress}>
        <Text>TouchableHighlight</Text>
      </TouchableHighlight>
      <TextInput
        placeholder="enter your name"
        onChangeText={(text: string) => console.log(text)}
        onFocus={() => console.log('onFocus')}
        onBlur={() => console.log('onBlur')}
        onEndEditing={() => console.log('onEndEditing')}
      />
    </SafeAreaView>
  );
}

 

๋ฐ˜์‘ํ˜•