관리 메뉴

πŸ’»πŸ’­πŸŽ§πŸŒ

[React Native] 03-5 μž¬μ‚¬μš©ν•  수 μžˆλŠ” μ»΄ν¬λ„ŒνŠΈ λ§Œλ“€κΈ° λ³Έλ¬Έ

λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ μ•± ν”„λ‘œκ·Έλž˜λ°

[React Native] 03-5 μž¬μ‚¬μš©ν•  수 μžˆλŠ” μ»΄ν¬λ„ŒνŠΈ λ§Œλ“€κΈ°

adorableco 2023. 9. 7. 22:59
λ°˜μ‘ν˜•

FlatList μ½”μ–΄ μ»΄ν¬λ„ŒνŠΈ μ‚¬μš©ν•˜κΈ°

λ˜‘κ°™μ€ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ—¬λŸ¬ 개 λ Œλ”λ§ν•  λ•ŒλŠ” FlatListλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 속도가 λΉ λ₯΄λ‹€.

 

import {FlatList} from 'react-native'

<FlatList data={people} />

 

 

keyExtractor 속성

itemκ³Ό index 값이 λ§€κ°œλ³€μˆ˜μΈ 콜백 ν•¨μˆ˜λ₯Ό 지정해 renderItem에 μ„€μ •ν•œ 콜백 ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ˜ key 속성에 μ„€μ •ν•  값을 μ–»μŒ

<FlatList
	data={people}
    renderItem={({item}) => <Person person={item} />}
    keyExtractor={(item, index) => item.id} />

βœ… ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜λͺ…이 없어도 됨

βœ… id 같은 속성이 μ—†λ‹€λ©΄ index.toString()을 λ°˜ν™˜ν•΄λ„ 됨

 

 

ItemSeparatorComponent 속성

이 속성에 μ„€μ •ν•œ 콜백 ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ•„μ΄ν…œκ³Ό μ•„μ΄ν…œ κ°„μ˜ κ΅¬λΆ„μž 역할을 ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ μ‚½μž…ν•¨

ItemSeparatorComponent={() => <View style={styles.itemSeparator} />}


const styles = StyleSheet.create({
	itemSeparator: {borderWidth: 1, borderColor: MD2Color.grey500}
})

 

 

moment νŒ¨ν‚€μ§€ κΈ°λŠ₯ μ‚¬μš©ν•˜κΈ°

Date ν΄λž˜μŠ€μ™€ μœ μ‚¬ν•˜μ§€λ§Œ Date ν΄λž˜μŠ€κ°€ μ œκ³΅ν•˜μ§€ μ•ŠλŠ” λͺ‡ 가지 μœ μš©ν•œ κΈ°λŠ₯을 μ œκ³΅ν•¨

 

Date μΈμŠ€ν„΄μŠ€λ₯Ό moment μΈμŠ€ν„΄μŠ€λ‘œ λ°”κΎΈλ©΄ 됨

moment(person.createdDate)

 

과거와 ν˜„μž¬μ˜ μ‹œκ°„ 차이λ₯Ό μ•ŒκΈ° μ‰¬μš΄ ν˜•νƒœλ‘œ μ•Œλ €μ€Œ

moment(person.createDate).startOf('day').fromNow()

βœ… ν•œκ΅­μ–΄λ‘œ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ moment-with-locales-es6 νŒ¨ν‚€μ§€μ—μ„œ moment 객체λ₯Ό μ–»κ³  moment.locale('ko') 

 

 

 

β˜† μ—¬νƒœκ» 아바타와 이미지가 랜덀으둜 λ‚˜μ˜€μ§€ μ•Šκ³  같은 κ²ƒλ§Œ 반볡됐던 이유

export const unsplashUrl = (width: number, height: number): string =>
  `https://source.unsplash.com/random/${width}x${height}`
export const avatarUriByName = (name: string) =>
  `https://ui-avatars.com/api/?name=${name.split(' ').join('+')}`

μœ„λŠ” util.ts 의 μ½”λ“œ 일뢀이닀. ${}λ₯Ό μ‚¬μš©ν•˜μ—¬ 링크 등에 λ³€μˆ˜ λ˜λŠ” ν‘œν˜„μ‹μ„ μ‚½μž…ν•˜κ³  싢을 λ•ŒλŠ” λ°±ν‹± 문자 `` 둜 감싸주어야 ν•˜λŠ”λ° λ‚œ 이걸 μž‘μ€ λ”°μ˜΄ν‘œ ''둜 μ°©κ°ν–ˆμ—ˆλ‹€.. . .. .. ^ ^ . . . 참고둜 λ§₯μ—μ„œ λ°±ν‹± λ¬ΈμžλŠ” option + ~ 라고 ν•œλ‹€. 

 

 

const

 "μƒμˆ˜(constant)"라고도 함

βœ… ν•œ 번 값을 ν• λ‹Ήν•˜λ©΄ λ‹€μ‹œ λ³€κ²½ν•  수 μ—†λŠ” λ³€μˆ˜λ₯Ό λ‚˜νƒ€λƒ„

 

 

νƒ€μž…μŠ€ν¬λ¦½νŠΈ ꡐ집함 νƒ€μž… ꡬ문

λŒ€μˆ˜ 데이터 νƒ€μž… (algebraic data type, ADT) : A와 Bλ₯Ό νƒ€μž…μ΄λΌκ³  ν•  λ•Œ 'A νƒ€μž…μ΄κ±°λ‚˜ Bνƒ€μž…' ν˜Ήμ€ 'Aνƒ€μž…μ΄λ©΄μ„œ B νƒ€μž…' κ³Ό 같은 νƒ€μž…μ„ λ§Œλ“€ λ•Œ μ‚¬μš©ν•˜λŠ” 것

합집합 ➑️ A | B

ꡐ집합 ➑️ A & B

 

ComponentProps νƒ€μž…

➑️ 속성(props)의 νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜λŠ”λ° μ‚¬μš©

React μ»΄ν¬λ„ŒνŠΈ: 속성(props)을 λ°›μ•„μ„œ 화면에 μ–΄λ–»κ²Œ λ Œλ”λ§ν• μ§€λ₯Ό κ²°μ •ν•˜λŠ” μš”μ†Œ

속성(props): μ»΄ν¬λ„ŒνŠΈ μ™ΈλΆ€μ—μ„œ μ „λ‹¬λ˜λ©°, μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ μ‚¬μš©

 

<μ‚¬μš©λ²•>

속성_νƒ€μž… = ComponentProps<typeof μ»΄ν¬λ„ŒνŠΈ_이름>

 

μž”μ—¬ μ—°μ‚°μž

➑️ μž”μ—¬ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ κ°μ²΄μ—μ„œ 일뢀 속성을 λΊ€ λ‚˜λ¨Έμ§€λ₯Ό μ‰½κ²Œ κ°€μ Έμ˜¬ 수 있음

const person = {
  name: "Alice",
  age: 30,
  country: "Wonderland"
};

const { age, ...rest } = person;

console.log(age); // 30
console.log(rest); // { name: "Alice", country: "Wonderland" }

μœ„ μ˜ˆμ œμ—μ„œ '...rest'λŠ” 'age' 속성을 μ œμ™Έν•œ λͺ¨λ“  속성을 μƒˆλ‘œμš΄ 객체둜 볡사함.

 

 

StyleProp νƒ€μž…

: μ»΄ν¬λ„ŒνŠΈμ˜ μŠ€νƒ€μΌμ„ μ„€μ •ν•˜λŠ” 데 μ‚¬μš©ν•¨

import { View, StyleProp, ViewStyle } from 'react-native';

type MyComponentProps = {
  containerStyle?: StyleProp<ViewStyle>;
};

function MyComponent({containerStyle}: MyComponentProps) {
  return (
    <View style={containerStyle}>
      
    </View>
  );
}

containerStyle?: StyleProp<ViewStyle>

 

'?' κΈ°ν˜ΈλŠ” 이 속성이 μ„ νƒμ μž„μ„ λ‚˜νƒ€λƒ„ ➑️ 이 속성을 μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ 되며 μƒλž΅ν•  수 있음

ViewStyle : 'View' μ»΄ν¬λ„ŒνŠΈμ— μ μš©ν•  수 μžˆλŠ” μŠ€νƒ€μΌμ˜ νƒ€μž…

 

 

Text μ½”μ–΄ μ»΄ν¬λ„ŒνŠΈμ˜ 속성 탐ꡬ

 

ν…μŠ€νŠΈ 쀄 수 μ œν•œ

<Text numberOfLines={3}>text</Text>

➑️ Textκ°€ λ Œλ”λ§ν•˜λŠ” ν…μŠ€νŠΈλ₯Ό 3μ€„λ‘œ μ œν•œ

 

ν…μŠ€νŠΈ κΎΈλ―ΈκΈ°

email: {textDecorationLine: 'underline', textDecorationColor: 'blue'},

➑️ textDecorationLine: ν…μŠ€νŠΈμ— 밑쀄

➑️ textDecorationColor: 밑쀄 색상

λ°˜μ‘ν˜•