메인으로
- 모든 텍스트는 반드시 Text 컴포넌트 안에 있어야 함
- 앱 상단 상태바(시계, 배터리 표시 부분)
- 종류: light-content, dark-content
<StatusBar barStyle="종류"/>
- 앱의 크기를 가져올수 있음
const { height, width } = Dimensions.get("window");
- 스크롤이 가능한 View
- 이걸로 만들지 않으면 넘어가는 부분은 짤려보임(= overflow: hidden)
- contentContainerStyle 프로퍼티로 스타일을 적용
<ScrollView contentContainerStyle={styles.todos}>
<ToDo />
</ScrollView>
- 클릭했을때 반투명 처리
- Event
- onPress: 누를때
- onPressOut: 누르고 손가락 띄울때
- input type="text" 역할
- Event
- onChangeText: 텍스트가 바뀐때
- onBlur: 포커스 빠져나갔을때
- onSubmitEditing: 완료(Done) 클릭시
<TextInput style={styles.input} value={toDoValue} multiline={true} underlineColorAndroid={"transparent"}/>
// 넣을 때
AsyncStorage.setItem("toDos", JSON.stringify(newToDos));
// 꺼낼 때
getData = async () => {
try {
const toDos = await AsyncStorage.getItem("toDos");
if(toDos !== null) {
const parseToDos = JSON.parse(toDos);
}
} catch (err) {
console.log(err)
}
}
- ui > li 역할
- 데이터가 담긴 배열을 data 속성에 넣고 renderItem에 반복될 컴포넌트를 리턴해주면 리스트를 생성
- data 안에는 반드시 key가 들어가 있어야 함
- data가 변해도 리렌더링을 하지 않으므로 변경될 기준이 되는 데이터인 extraData를 따로 설정해줘야 한다.
const DATA = [
{
key: uuid(),
text: 'First Item',
},
{
key: uuid(),
text: 'Second Item',
},
{
key: uuid(),
text: 'Third Item',
},
];
export default function App() {
return (
<SafeAreaView style={styles.container}>
<FlatList
data={ DATA }
extraData={ DATA.length } // 갯수가 변하면 리렌더링
renderItem={ ({item}) => (
<Button title={item.text} onPress={() => this.removeItem( item.key )}/>
)}
/>
</SafeAreaView>
);
}
- 이미지
- resizeMode: contain(비율에 맞춤) stretch(크기에 맞게 늘림)
<Image source={{uri: item.image}} style={{width: 300, height: 300}} resizeMode={ 'contain' }/>
- IOS와 Android 각각 기본 로딩화면을 출력
import { ActivityIndicator, View} from "react-native";
export default function App() {
return (
<View style={[styles.container, styles.horizontal]}>
<ActivityIndicator size="large" color="#0000ff" />
</View>
);
}
import { ImageBackground, Text, View } from "react-native";
const image = { uri: "https://reactjs.org/logo-og.png" };
export default App = () => (
<View style={styles.container}>
<ImageBackground source={image} style={styles.image}>
<Text style={styles.text}>Inside</Text>
</ImageBackground>
</View>
);
- 노치 형태가 있는 폰들의 뷰 영역에 대응함
- 상단 노치 영역과 하단 홈 슬라이드 영역을 지켜줌
<View style={ styles.container }>
<SafeAreaView>
...
</SafeAreaView>
</View>