RN의 실행
일단 React Native 공식 홈페이지 을 보고, 설치를 한후 따라하길 바란다.
react-native gitbookTest
을 터미널에 실행하여 새 프로젝트를 만든다.
그 다음 실행을 해보면
이런 창이 뜨면 실행 완료 입니다. ios로 실행을 했기 때문에 폴더에 있는 index.ios.js 가 실행 되게 됩니다.
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';
class gitbookTest extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
AppRegistry.registerComponent('gitbookTest', () => gitbookTest);
이런 소스 코드입니다. 처음에는 React와 ReactNative 라이브러리를 가져옵니다.
그 다음 gitbookTest 라는 클래스를 생성하는데 Component을 상속받아서 만듭니다. 이 Component는 위의 react에서 가져온 것 입니다. 우리는 Component을 상속받아서 gitbookTest 라는 또다른 Component을 만들게 됩니다.(잘 이해가 안가시면 상속의 개념을 검색해서 찾아보시길 바랍니다)
이 Component가 실제로 화면에 보여질 때 에는 render함수의 return값 만이 보이게 됩니다. 여기서 보면
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
);
이 부분 이겠죠. 여기서 RN에서는 return 값은 1개의 컴포넌트밖에 가질 수 없습니다. 그렇기 때문에 항상 전체를 View로 감싸주는 편이 좋습니다. 예를 들어
return (
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
);
이 경우에는 return이 3개의 Text 컴포넌트가 되기때문에 에러가 됩니다.
실행된 화면을 보면 이 부분이 화면에 나타났다는 것을 알 수 있습니다. 여기서 글자를 바꾸어서 다시 실행 또는 command+R 을 입력하시면 바뀐 글자로 나타나는 것을 알 수 있습니다.
우리는 계속 style 이라는 property가 component 안에 있는 것을 알수 있는데요,
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
여기서의 style 부분 입니다. {styles.welcome}
이라는 값을 가지고 있습니다.
여기서 괄호안({ })은 return 안에서는 component값이기 때문에 어떠한 js코드의 값이나, 코드를 실행시키기 위해서는 이부분이 js라는 것을 알려주어야 하는데 괄호안에 부분을 js 코드로 인식합니다.
그렇기 때문에 {styles.welcome}
은 js 코드에서의 styles.welcome 을 의미 하는 것이지요. 만약 괄호가 없다면 js code로 인식하지 않고 단순한 string으로 인식하게 될 것입니다(정확히는 string으로 인식하기 위해서는 "styles.welcome" 따옴표(")을 써주어야 하겠지만요)
그렇다면 이 styles라는 객체는 어디에 정의가 되었을까요?
바로 맨 밑 부분
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
여기에 정의가 되어있습니다. styles는 StyleSheet라는 것에 의해 만들어 졌는데요 StyleSheet는
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';
'react-native' 에서 가져왔군요.
그렇다면 style.welcome은
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
}
이러한 object 라는 것을 알 수 있습니다. 여기서는 fontSize, textAlign, margin 값이 정의 되어있군요. 여기서 fontSize를 100으로 바꾸고 command+R을 통해 재실행을 하면 welcome이 커진것을 확인할 수 있습니다. 그렇다면 우리는 여기에 어떠한 style속성들을 정의할 수 있을까요? 그건 react-native-Text-docs을 확인하시면 됩니다. 나중에 어떠한 style을 만들고 싶을때 참고하시면 되겠죠?
그리고 마지막의
AppRegistry.registerComponent('gitbookTest', () => gitbookTest);
의 부분이 있습니다. 이건 index.ios.js, index.android.js 에 밖에 없는 부분인데요. 실제로 어플이 실행될 때 어떤 화면을 처음에 실행을 해주는 지를 설정해주는 부분 입니다.
즉 'gitbookTest'라는 어플이 실행될때, gitbookTest라는 컴포넌트를 실행시켜주세요 라는 것 입니다. gitbookTest라는 컴포넌트는 우리가 지금까지 계속 보았던 컴포넌트이죠.
style의 정의한 부분 위에 test2라는 컴포넌트를 추가해봅시다.
class gitbookTest extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
);
}
}
class test2 extends Component {
render() {
return (
<View style={styles.container}>
<Text>test2 Component</Text>
</View>
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
이렇게 말이죠. 그 다음에
AppRegistry.registerComponent('gitbookTest', () => test2);
Appregistry 의 gitbookTest을 test2로 바꾸어서 결과를 보면 test2 컴포넌트가 실행된 것을 알 수 있습니다. 이제 RN에 대해 감이 잡히시나요? 다음에는 flexbox에 대해 설명을 해보도록 합시다.