React Native 열 시트
React Native - 한 번 알아보세요. Anywhere
React Native는 React를 이용한 네이티브 모바일 애플리케이션 구축을 위한 프레임워크입니다. 개발자가 React를 사용하여 iOS 및 Android용 모바일 앱을 단일 코드베이스로 만들 수 있습니다.
본문 바로가기
- 설치
- 시작
- 핵심 부품
- 네비게이션
- 전략
- 문의
- API 및 서비스
- 기본 모듈
- 공연
- 테스트
- 디버깅
- 직업
- 플랫폼 스펙
- Third-Party 라이브러리
- 모범 사례
- Troubleshooting 를
설치하기
개발 환경 설정
자주 묻는 질문
카지노사이트
React Native CLI를
카지노사이트
Android 개발 설정
카지노사이트
iOS 개발 설정 (macOS 전용)
카지노사이트
프로젝트 생성
React Native CLI를
카지노사이트
엑스포 CLI
카지노사이트
앱 실행
React Native CLI를
카지노사이트
제품정보
카지노사이트
시작하기
기본 앱 구조
카지노사이트
TypeScript 설정
카지노사이트
ο 회원 관리
프로젝트 구조
카지노사이트
핵심 부품
기본 부품
카지노사이트
고급 부품
카지노사이트
공급 업체
카지노사이트
- 연혁
React 설정
카지노사이트
스택 탐색기
카지노사이트
탭 탐색기
카지노사이트
항법 걸이
카지노사이트
서랍 항해자
오프화이트
국가 관리
React 훅
카지노사이트
텍스트 API
오프화이트
Redux 설정
카지노사이트
카지노사이트
사이트맵
스타일시트
카지노사이트
Flexbox 배치
카지노사이트
책임감 있는 디자인
카지노사이트
Styled 부품
카지노사이트
```javascript import React from 'react'; import styled from 'styled-components/native';
const Container = styled.Viewflex: 1;
padding: 20px;
background-color: #f5f5f5;
;
const Title = styled.Textfont-size: 24px;
font-weight: bold;
text-align: center;
margin-bottom: 20px;
color: #333;
;
const StyledButton = styled.TouchableOpacitybackground-color: ${props => props.primary ? '#007AFF' : '#FF3B30'};
padding: 15px 30px;
border-radius: 10px;
margin-bottom: 10px;
align-items: center;
;
const ButtonText = styled.Textcolor: white;
font-size: 16px;
font-weight: 600;
;
const StyledComponentsExample = () => {
return (
<StyledButton primary onPress={() => console.log('Primary pressed')}>
<ButtonText>Primary Button</ButtonText>
</StyledButton>
<StyledButton onPress={() => console.log('Secondary pressed')}>
<ButtonText>Secondary Button</ButtonText>
</StyledButton>
</Container>
); };
export default StyledComponentsExample; ```의 경우
API 및 서비스
페치 API
```javascript // services/apiService.js const API_BASE_URL = 'https://jsonplaceholder.typicode.com';
class ApiService {
static async get(endpoint) {
try {
const response = await fetch(${API_BASE_URL}${endpoint}
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('GET request failed:', error);
throw error;
}
}
static async post(endpoint, data) {
try {
const response = await fetch(${API_BASE_URL}${endpoint}
, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('POST request failed:', error);
throw error;
}
}
static async put(endpoint, data) {
try {
const response = await fetch(${API_BASE_URL}${endpoint}
, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('PUT request failed:', error);
throw error;
}
}
static async delete(endpoint) {
try {
const response = await fetch(${API_BASE_URL}${endpoint}
, {
method: 'DELETE',
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.status === 204 ? null : await response.json();
} catch (error) {
console.error('DELETE request failed:', error);
throw error;
}
} }
export default ApiService;
// Usage in component import React, { useState, useEffect } from 'react'; import { View, Text, FlatList, ActivityIndicator } from 'react-native'; import ApiService from '../services/apiService';
const PostsScreen = () => { const [posts, setPosts] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null);
useEffect(() => { fetchPosts(); }, []);
const fetchPosts = async () => { try { setLoading(true); const data = await ApiService.get('/posts'); setPosts(data); } catch (err) { setError(err.message); } finally { setLoading(false); } };
const renderPost = ({ item }) => (
if (loading) {
return (
if (error) {
return (
return (
Axios 통합
```bash
Install Axios
npm install axios ```의 경우
```javascript // services/httpClient.js import axios from 'axios'; import AsyncStorage from '@react-native-async-storage/async-storage';
const httpClient = axios.create({ baseURL: 'https://api.example.com', timeout: 10000, headers: { 'Content-Type': 'application/json', }, });
// Request interceptor
httpClient.interceptors.request.use(
async (config) => {
const token = await AsyncStorage.getItem('authToken');
if (token) {
config.headers.Authorization = Bearer ${token}
;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
// Response interceptor httpClient.interceptors.response.use( (response) => { return response; }, async (error) => { if (error.response?.status === 401) { // Handle unauthorized access await AsyncStorage.removeItem('authToken'); // Navigate to login screen } return Promise.reject(error); } );
export default httpClient;
// services/userService.js import httpClient from './httpClient';
export const userService = {
getUsers: () => httpClient.get('/users'),
getUser: (id) => httpClient.get(/users/${id}
),
createUser: (userData) => httpClient.post('/users', userData),
updateUser: (id, userData) => httpClient.put(/users/${id}
, userData),
deleteUser: (id) => httpClient.delete(/users/${id}
),
};
```에 대하여
Async저장
```bash
Install AsyncStorage
npm install @react-native-async-storage/async-storage
For iOS
cd ios && pod install && cd .. ```의 경우
카지노사이트
기본 모듈
Accessing Device 기능
카지노사이트
Custom Native 모듈 만들기
카지노사이트
- 연혁
최적화 기술
카지노사이트
FlatList 최적화
카지노사이트
이미지 최적화
카지노사이트
번들 크기 최적화
```javascript // metro.config.js const { getDefaultConfig } = require('metro-config');
module.exports = (async () => { const { resolver: { sourceExts, assetExts }, } = await getDefaultConfig();
return { transformer: { babelTransformerPath: require.resolve('react-native-svg-transformer'), }, resolver: { assetExts: assetExts.filter(ext => ext !== 'svg'), sourceExts: [...sourceExts, 'svg'], }, // Enable bundle splitting serializer: { createModuleIdFactory: function () { return function (path) { // Use shorter module IDs return path.substr(1).replace(/\//g, '_'); }; }, }, }; })();
// Dynamic imports for code splitting const LazyComponent = React.lazy(() => import('./LazyComponent'));
const App = () => {
return (
제품정보
Jest 설정
```bash
Jest is included with React Native by default
Install additional testing utilities
npm install --save-dev @testing-library/react-native npm install --save-dev @testing-library/jest-native ```의 경우
카지노사이트
디톡스 E2E 제품정보
```bash
Install Detox
npm install --save-dev detox
Initialize Detox
npx detox init
Install Detox CLI
npm install -g detox-cli ```의 경우
```javascript // e2e/firstTest.e2e.js describe('Example', () => { beforeAll(async () => { await device.launchApp(); });
beforeEach(async () => { await device.reloadReactNative(); });
it('should have welcome screen', async () => { await expect(element(by.id('welcome'))).toBeVisible(); });
it('should show hello screen after tap', async () => { await element(by.id('hello_button')).tap(); await expect(element(by.text('Hello!!!'))).toBeVisible(); });
it('should show world screen after tap', async () => { await element(by.id('world_button')).tap(); await expect(element(by.text('World!!!'))).toBeVisible(); }); });
// .detoxrc.json { "testRunner": "jest", "runnerConfig": "e2e/config.json", "configurations": { "ios.sim.debug": { "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/YourApp.app", "build": "xcodebuild -workspace ios/YourApp.xcworkspace -scheme YourApp -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", "type": "ios.simulator", "device": { "type": "iPhone 12" } }, "android.emu.debug": { "binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk", "build": "cd android && ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug && cd ..", "type": "android.emulator", "device": { "avdName": "Pixel_4_API_30" } } } } ```를 호출합니다.
뚱 베어
```javascript // mocks/@react-native-async-storage/async-storage.js export default { setItem: jest.fn(() => Promise.resolve()), getItem: jest.fn(() => Promise.resolve(null)), removeItem: jest.fn(() => Promise.resolve()), clear: jest.fn(() => Promise.resolve()), getAllKeys: jest.fn(() => Promise.resolve([])), };
// tests/services/apiService.test.js import ApiService from '../services/apiService';
// Mock fetch global.fetch = jest.fn();
describe('ApiService', () => { beforeEach(() => { fetch.mockClear(); });
it('should fetch data successfully', async () => { const mockData = { id: 1, title: 'Test Post' }; fetch.mockResolvedValueOnce({ ok: true, json: async () => mockData, });
const result = await ApiService.get('/posts/1');
expect(fetch).toHaveBeenCalledWith(
'https://jsonplaceholder.typicode.com/posts/1'
);
expect(result).toEqual(mockData);
});
it('should handle fetch errors', async () => { fetch.mockRejectedValueOnce(new Error('Network error'));
await expect(ApiService.get('/posts/1')).rejects.toThrow('Network error');
}); }); ```의 경우
관련 링크
React Native 디버거
```bash
Install React Native Debugger
Download from: https://github.com/jhen0409/react-native-debugger
Enable debugging in app
Shake device or press Cmd+D (iOS) / Cmd+M (Android)
Select "Debug JS Remotely"
```로
Flipper 통합
카지노사이트
오프화이트
성능 모니터링
카지노사이트
오류 경계
__CODE_BLOCK_49_로그
계정 만들기
Android 배포
카지노사이트
```javascript // android/app/build.gradle android { ... signingConfigs { release { if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) { storeFile file(MYAPP_UPLOAD_STORE_FILE) storePassword MYAPP_UPLOAD_STORE_PASSWORD keyAlias MYAPP_UPLOAD_KEY_ALIAS keyPassword MYAPP_UPLOAD_KEY_PASSWORD } } } buildTypes { release { ... signingConfig signingConfigs.release } } }
// android/gradle.properties MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore MYAPP_UPLOAD_KEY_ALIAS=my-key-alias MYAPP_UPLOAD_STORE_PASSWORD=* MYAPP_UPLOAD_KEY_PASSWORD=*** ```를 호출합니다.
iOS 배포
```bash
Archive for distribution
xcodebuild -workspace ios/MyApp.xcworkspace \ -scheme MyApp \ -configuration Release \ -archivePath ios/build/MyApp.xcarchive \ archive
Export IPA
xcodebuild -exportArchive \ -archivePath ios/build/MyApp.xcarchive \ -exportPath ios/build \ -exportOptionsPlist ios/ExportOptions.plist ```의 경우
Fastlane 자동화
카지노사이트
카지노사이트
CodePush (Over-the-Air 업데이트)
```bash
Install CodePush CLI
npm install -g code-push-cli
Install CodePush SDK
npm install --save react-native-code-push
Register app
code-push app add MyApp-iOS ios react-native code-push app add MyApp-Android android react-native ```로
카지노사이트
플랫폼 Specific 부호
플랫폼 모듈
카지노사이트
플랫폼-Specific 파일
카지노사이트
안전 구역 취급
```javascript import React from 'react'; import { SafeAreaView, StatusBar, Platform } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context';
const SafeAreaExample = () => { const insets = useSafeAreaInsets();
return (
<View style={{
paddingTop: insets.top,
paddingBottom: insets.bottom,
paddingLeft: insets.left,
paddingRight: insets.right,
}}>
<Text>Content with safe area padding</Text>
</View>
</SafeAreaView>
); }; ```에
제 3 부 Libraries
인기 있는 Libraries
```bash
UI Libraries
npm install react-native-elements npm install react-native-paper npm install native-base
Navigation
npm install @react-navigation/native npm install @react-navigation/stack npm install @react-navigation/bottom-tabs
State Management
npm install redux react-redux @reduxjs/toolkit npm install zustand npm install recoil
Networking
npm install axios npm install react-query
Storage
npm install @react-native-async-storage/async-storage npm install react-native-mmkv
Media
npm install react-native-image-picker npm install react-native-video npm install react-native-sound
Maps
npm install react-native-maps
Animations
npm install react-native-reanimated npm install lottie-react-native
Forms
npm install react-hook-form npm install formik
Utils
npm install react-native-device-info npm install react-native-permissions npm install react-native-keychain ```의 경우
Library 통합 예제
카지노사이트
최고의 연습
회사연혁
카지노사이트
성과 모범 사례
```javascript
// 1. Use FlatList for large lists
const LargeList = ({ data }) => (
// 2. Optimize images
const OptimizedImage = ({ uri }) => (
// 3. Use InteractionManager for heavy operations import { InteractionManager } from 'react-native';
const HeavyOperationComponent = () => { useEffect(() => { InteractionManager.runAfterInteractions(() => { // Heavy operation that shouldn't block UI performHeavyOperation(); }); }, []);
return
// 4. Minimize bridge communication const MinimizeBridge = () => { // Bad: Multiple bridge calls const badExample = () => { Animated.timing(value1, { toValue: 100 }).start(); Animated.timing(value2, { toValue: 200 }).start(); Animated.timing(value3, { toValue: 300 }).start(); };
// Good: Batch operations const goodExample = () => { Animated.parallel([ Animated.timing(value1, { toValue: 100 }), Animated.timing(value2, { toValue: 200 }), Animated.timing(value3, { toValue: 300 }), ]).start(); }; }; ```의 경우
보안 모범 사례
카지노사이트
문제 해결
일반적인 문제
카지노사이트
Debug Common 오류
카지노사이트
제품정보
React Native는 크로스 플랫폼 모바일 애플리케이션을 구축하는 강력한 프레임 워크입니다.
- ** 크로스 플랫폼 개발**: 한 번 작성, iOS 및 Android 모두에서 실행
- Native Performance: 기본 플랫폼 API 및 구성품에 직접 액세스
- ** 핫 리로드 ** : 빠른 개발 사이클
- Rich Ecosystem: 광범위한 라이브러리 생태계 및 커뮤니티 지원
- ** Familiar 개발 **: React 개념 및 JavaScript/TypeScript 사용
- Flexible Architecture : 다양한 상태 관리 및 탐색 솔루션 지원
- 제품 준비: Facebook, Instagram 및 Airbnb와 같은 주요 회사에 의해 사용하는
React Native excel은 기본 성능과 플랫폼별 사용자 경험을 유지하면서 신속한 모바일 앱 개발을 가능하게 합니다. 성숙한 생태계, 종합적인 툴링 및 강력한 커뮤니티 지원은 고품질의 모바일 응용 프로그램을 효율적으로 구축하려는 팀을위한 훌륭한 선택입니다.
<문서> 기능 copyToClipboard () 이름 * const 명령어 = document.querySelectorAll('code'); let allCommands = ''; 명령. forEach(cmd =>의 경우 모든Commands +=cmd.textContent + navigator.clipboard.write텍스(allCommands); alert('모든 명령은 클립보드에 복사!'); 이름 *
함수 생성PDF() { 창. 인쇄 (); 이름 *