파티에 조금 늦었지만 여기에 더 포괄적 인 답변이 있습니다.
반응
React는 "섀도 DOM"을 사용하여 모든 변경에 대해 전체 DOM 트리를 다시 작성하는 대신 변경된 내용으로 DOM을 효율적으로 업데이트하는 구성 요소 기반 UI 라이브러리입니다. 처음에는 웹 앱용으로 제작되었지만 이제는 모바일 및 3D / vr에도 사용할 수 있습니다.
React Native는 기본 모바일 UI 요소에 맵핑되기 때문에 React와 React Native 사이의 구성 요소를 교환 할 수 없지만 비즈니스 로직 및 비 렌더링 관련 코드는 재사용 할 수 있습니다.
반응
처음에는 React 라이브러리에 포함되었지만 React가 웹 이외의 다른 플랫폼에 사용되면 분리되었습니다. DOM의 진입 점 역할을하며 React와 함께 사용됩니다.
예:
import React from 'react';
import ReactDOM from 'react-dom';
class App extends Component {
state = {
data: [],
}
componentDidMount() {
const data = API.getData(); // fetch some data
this.setState({ data })
}
clearData = () => {
this.setState({
data: [],
});
}
render() {
return (
<div>
{this.state.data.map((data) => (
<p key={data.id}>{data.label}</p>
))}
<button onClick={this.clearData}>
Clear list
</button>
</div>
);
}
}
ReactDOM.render(App, document.getElementById('app'));
네이티브 반응
React Native는 React를 사용하고 "브릿지"를 통해 Javascript와 기본 대응 물 사이에서 통신하는 크로스 플랫폼 모바일 프레임 워크입니다. 이 때문에 React Native를 사용할 때 많은 UI 구조가 달라야합니다. 예를 들어, 목록 map
을 작성할 때 React Native 's 대신 목록을 작성하는 데 사용하려고하면 주요 성능 문제가 발생합니다 FlatList
. React Native는 스마트 시계 및 TV뿐만 아니라 IOS / Android 모바일 앱을 구축하는 데 사용할 수 있습니다.
엑스포
Expo는 새로운 React Native 앱을 시작할 때 사용됩니다.
Expo는 범용 React 애플리케이션을위한 프레임 워크 및 플랫폼입니다. iOS, Android 및 웹 앱에서 개발, 빌드, 배포 및 신속하게 반복 할 수 있도록 React Native 및 Native 플랫폼을 중심으로 구축 된 도구 및 서비스 세트입니다.
참고 : Expo를 사용할 때는 제공하는 Native Api 만 사용할 수 있습니다. 포함하는 모든 추가 라이브러리는 순수 자바 스크립트이거나 엑스포를 꺼내야합니다.
React Native를 사용하는 동일한 예제 :
import React, { Component } from 'react';
import { Flatlist, View, Text, StyleSheet } from 'react-native';
export default class App extends Component {
state = {
data: [],
}
componentDidMount() {
const data = API.getData(); // fetch some data
this.setState({ data })
}
clearData = () => {
this.setState({
data: [],
});
}
render() {
return (
<View style={styles.container}>
<FlatList
data={this.state.data}
renderItem={({ item }) => <Text key={item.id}>{item.label}</Text>}
/>
<Button title="Clear list" onPress={this.clearData}></Button>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
});
차이점 :
- 렌더링 이외의 모든 항목은 동일하게 유지 될 수 있으므로 React 및 React Native에서 비즈니스 로직 / 라이프 사이클 로직 코드를 재사용 할 수 있습니다.
- React Native에서는 모든 컴포넌트를 반응 네이티브 또는 다른 UI 라이브러리에서 가져와야합니다.
- 네이티브 구성 요소에 매핑되는 특정 API를 사용하면 일반적으로 자바 스크립트 측의 모든 것을 처리하는 것보다 성능이 향상됩니다. 전의. flatlist를 사용하여 목록을 작성하기위한 구성 요소 맵핑
- 미묘한 차이점 :
onClick
로 전환 onPress
, React Native는 스타일 시트를 사용하여 스타일을보다 성능 적으로 정의하고 React Native는 flexbox를 기본 레이아웃 구조로 사용하여 반응을 유지합니다.
- React Native에는 전통적인 "DOM"이 없으므로 React와 React Native 모두에서 순수 자바 스크립트 라이브러리 만 사용할 수 있습니다.
반응 360
React를 사용하여 3D / VR 응용 프로그램을 개발할 수도 있습니다. 컴포넌트 구조는 React Native와 매우 유사합니다. https://facebook.github.io/react-360/