티스토리 뷰
아래 코드는 StateBar의 dark light 모드를 설정하거나 StateBar를 숨기고 보이는 .. 버튼이 있는 화면이다.
공부삼아 함수형 코드를 클래스형 코드로 변경해보았는데
그 둘의 차이점을 보고 어떤 역할을 하는건지 자세히 알 수 있게 되었다.
함수형 코드는 기존 프로그래밍 언어들과 다를게 없어 생략.
클래스형 코드는 State라는것으로 데이터를 관리하는데 클래스 내부의 전역변수라고 생각하면 편하다.
보통 클래스를 만들면 클래스 내부 최 상단에 생성자를 만들게 되는데 이 떄 props라는걸 파라미터로 받아 사용하고자 하는 변수를 this.state = {}라는 배열에 넣어 사용한다, (다만 json과 같은 key : value 형태)
배열에 넣어 선언한 변수들은 사용할떄 this.state.변수명 으로 사용한다.
해당 변수를 변경하기 위해선 this.setState({key:value});을 사용해야.. render부분에서 쓰는 this.state.key가 변경이 된다..
* this.state.변수명 = 값 으로 변경해도 값은 변경은 되지만 정상 동작을 하지 않는것으로 확인되고 .. 이유는 모름.. 아는분은 알려주세요..
아래 코드는 전문 ui도
함수형 코드는 주석처리 되어있다. ui도 기능도 동일한 코드.
import React, { useState, Component } from "react";
import { Button, Text, StyleSheet, StatusBar, View } from "react-native";
import Constants from "expo-constants";
//////////////////////////// 클래스형 시작 ///////////////////////////////
class Status_bar extends Component {
constructor(props) {
super(props);
this.state = {
styleTypes: ["dark-content", "light-content"],
visibleStatusBar: false,
styleStatusBar: "dark-content"
}
}
changeVisibilityStatusBar() {
console.log("aaa" + this.state.visibleStatusBar)
this.setState({
visibleStatusBar : !this.state.visibleStatusBar
});
console.log("bbb" + this.state.visibleStatusBar)
}
changeStyleStatusBar() {
// console.log("ccc" + this.state.styleStatusBar)
if (this.state.styleStatusBar === this.state.styleTypes[0]) {
this.setState({
styleStatusBar: "light-content"
});
} else {
this.setState({
styleStatusBar: "dark-content"
});
// console.log("ddd" + this.state.styleStatusBar)
}
}
render() {
return (
<View style={styles.container}>
<View>
<Text style={styles.textStyle}>StatusBar Style: {this.state.styleStatusBar}</Text>
<Text style={styles.textStyle}>StatusBar Visibility: {!this.state.visibleStatusBar ? 'Visible' : 'Hidden'}</Text>
</View>
<StatusBar backgroundColor="blue" barStyle={this.state.styleStatusBar} />
<View>
<StatusBar hidden={this.state.visibleStatusBar} />
</View>
<View style={styles.buttonContainer}>
<Button title="Toggle StatusBar" onPress={() => this.changeVisibilityStatusBar()} />
</View>
<View style={styles.buttonContainer}>
<Button title="Change StatusBar Style" onPress={() => this.changeStyleStatusBar()} />
</View>
</View>
);
}
}
export default Status_bar;
//////////////////////////// 클래스형 끝 ///////////////////////////////
//////////////////////////// 함수형 시작 ///////////////////////////////
// const App = () => {
// const styleTypes = ['dark-content', 'light-content'];
// const [visibleStatusBar, setVisibleStatusBar] = useState(false);
// const [styleStatusBar, setStyleStatusBar] = useState(styleTypes[0]);
// const changeVisibilityStatusBar = () => {
// setVisibleStatusBar(!visibleStatusBar);
// };
// const changeStyleStatusBar = () => {
// const styleId = styleTypes.indexOf(styleStatusBar) + 1;
// if (styleId === styleTypes.length) {
// return setStyleStatusBar(styleTypes[0]);
// }
// return setStyleStatusBar(styleTypes[styleId]);
// };
// return (
// <View style={styles.container}>
// <View>
// <Text style={styles.textStyle}>StatusBar Style: {styleStatusBar}</Text>
// <Text style={styles.textStyle}>StatusBar Visibility: {!visibleStatusBar ? 'Visible' : 'Hidden'}</Text>
// </View>
// <StatusBar backgroundColor="blue" barStyle={styleStatusBar} />
// <View>
// <StatusBar hidden={visibleStatusBar} />
// </View>
// <View style={styles.buttonContainer}>
// <Button title="Toggle StatusBar" onPress={() => changeVisibilityStatusBar()} />
// </View>
// <View style={styles.buttonContainer}>
// <Button title="Change StatusBar Style" onPress={() => changeStyleStatusBar()} />
// </View>
// </View>
// );
// };
// export default App;
//////////////////////////// 함수형 끝 ///////////////////////////////
//////////////////////////// styles는 공통 사용 ///////////////////////////////
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#ECF0F1',
padding: 8
},
buttonContainer: {
padding: 10
},
textStyle: {
textAlign: 'center'
}
});
'React Native' 카테고리의 다른 글
react i18n 화폐 단위 설정 (0) | 2021.04.16 |
---|---|
백그라운드 플로팅 윈도우 버튼.. (0) | 2021.01.28 |
react native spannableText 특정 텍스트에 색칠하기.. (0) | 2020.08.10 |
google map polyline direction 여러 라인 보여주기. (0) | 2020.07.20 |
RN Navigation v5 / React Native 화면 전환 (0) | 2020.06.29 |
- Total
- Today
- Yesterday
- https://hwan-shell.tistory.com/244
- ubunut android
- not working adb
- spannableText
- adb 환경변수
- 자바
- 구글 맵 경로 그리기
- react native state
- 차번호 정규식
- not starting .bash_profile
- not found adb
- 함수형 코드
- nosql
- 클래스형 코드
- 안드로이드
- mac android
- 차번호 정규표현식
- 구글 맵 선그리기
- rn
- Android
- MongoDB
- 데이터베이스
- text 부분 색 칠하기
- https://medium.com/@limgyumin/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%9D%98-apply-with-let-also-run-%EC%9D%80-%EC%96%B8%EC%A0%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-4a517292df29
- ubunut 설치 link
- 명령어
- mongo db
- React Native
- 귀찮아;;
- insert
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |