React Native는 React와 앱 플랫폼의 기본 기능을 사용하여 Android 및 iOS 애플리케이션을 빌드하기 위한 오픈소스 프레임워크
사용자 인터페이스(UI)를 구축하기 위한 React를 기반으로 하지만 React는 브라우저를 대상으로 하고 React Native는 모바일 플랫폼을 대상으로 함
대부분의 코드를 플랫폼 간에 공유할 수 있기 때문에 Android와 iOS 모두에서 동시에 쉽게 개발할 수 있음
WebView를 사용하는 다른 크로스 플랫폼과는 다르게 실제 호스트 플랫폼의 표준 렌더링 API를 사용해서 렌더링함
=> WebView를 사용하면 성능상의 문제와 Native에서 사용하는 기본 UI 요소나 애니메이션을 Javascript, HTML 및 CSS 조합으로 모방하려고 하게에 한계가 있음
=> 타 플랫폼에서는 웹에서 만들고 그것을 앱에 임베딩해서 사용, React Native는 마크업 요소를 실제 네이티브 요소로 변환해서 사용함
리액트 네이티브는 리액트와 마찬가지로 state와 props가 변경되면 React Native의 뷰를 다시 렌더링하는 것과 같이 React와 대부분의 기능이 비슷
React Native와 React의 주요 차이점은 React Native가 HTMl 및 CSS 마크업을 사용하는 대신 호스트 플랫폼의 UI 라이브러리를 활용한다는 것
크로스 플랫폼이란 이름과 같이 대부분의 비슷한 소스 코드로 iOS와 Android 모두를 위한 앱 개발을 할 수 있음. 따라서 많은 시간과 비용을 절약해서 앱을 만들 수 있음
Android 개발에서는 Kotlin 또는 Java로 View를 작성
iOS 개발에서는 Swift 또는 Objective-C를 사용
React Native를 사용하면 React Component를 사용하여 JavaScript로 이러한 View를 호출할 수 있음
런타임 시 React Native는 해당 구성 요소에 해당하는 Android 및 iOS View를 생성. React Native 구성 요소는 Android 및 iOS와 동일한 보기에서 지원되기 때문에 React Native 앱은 다른 앱과 같은 모양, 느낌 및 성능을 제공. 이러한 플랫폼 지원 구성 요소를 Native Component라고 함
Native Components는 누구나 각자 원하는 바에 맞게 만들 수 있음
Core Components는 리액트에서 기본으로 제공하는 Native Components
ex) <View> <Text> <Image> <ScrollView> <TextInput>...
리액트 네이티브를 이용하기 위한 개발 환경을 세팅하는 방법은 대표적으로 두 가지
React Native에서는 CSS가 아닌 Javascript로 스타일링을 함
리액트 네이티브에서는 기본적으로 SVG 파일을 지원하지 않기 때문에 SVG를 사용하려면 설정을 해줘야 함
svg 요소나 속성들을 React Native에서 사용할 수 있게 해줌
npm install react-native-svg --save
svg 파일을 import해서 사용할 수 있게 해줌
npm install -D react-native-svg-transformer
const { getDefaultConfig } = require("expo/metro-config");
module.exports = (() => {
const config = getDefaultConfig(__dirname);
const { transformer, resolver } = config;
config.transformer = {
...transformer,
babelTransformerPath: require.resolve("react-native-svg-transformer")
};
config.resolver = {
...resolver,
assetExts: resolver.assetExts.filter((ext) => ext !== "svg"),
sourceExts: [...resolver.sourceExts, "svg"]
};
return config;
})();
참고: https://www.npmjs.com/package/react-native-svg-transformer
리액트 네이티브에서 리스트를 나열하기
ScrollView는 Component가 로드된 직후 Item을 로드함. 모든 데이터가 RAM에 저장되어 한 번에 보여주기 때문에 많은 양의 데이터가 있는 경우 성능 저하기 일어남
반면에 FlatList는 10개(기본값)의 Item을 화면에 탑재하고 사용자가 보기를 스크롤하면 다른 Item이 탑재됨. 이러한 점에서 FlatList를 사용하는 것이 더 좋음
적은 수의 Item에는 ScrollView를 사용하고 많은 수의 Item에는 FlatList를 사용