React と React Native の違い:同じ考え方、異なる部品

React と React Native の違い

React と React Native:要素の対応表と使い分け | We.Inc

ReactはHTML要素でWebの画面を作り、React Nativeはネイティブのビューで iOS と Android のアプリを作ります。各Web要素に対応するネイティブ部品と、共有できるものを確認しましょう。

Reactはライブラリで、React Nativeはそれを使って iOS と Android のアプリを作ります。WebのReactでは、div や button などのHTML要素をブラウザーのページに描画します。React Nativeは View や Text など独自のコンポーネントを描画し、それらは実際のプラットフォームのビューになります。コンポーネント、props、state、フックの使い方はどちらも同じです。

並べて比較

違いを一番早くつかむには、Web要素をネイティブの対応部品に置き換えてみることです。下の対応表でHTMLタグ、prop、CSSの書き方を検索すると、各行にReact Nativeでの置き換え先と、動作の違いについての短いメモが表示されます。

よくある質問

React Native は React と同じものですか?

いいえ。Reactはコンポーネントのライブラリで、React NativeはReactを使ってネイティブのモバイルビューを動かすフレームワークです。コンポーネントの書き方は同じですが、HTMLの代わりに View、Text などのネイティブコンポーネントを描画し、ブラウザーのDOMはありません。

React Native で HTML や CSS は使えますか?

直接は使えません。div や span の要素も、CSSファイルもありません。スタイルはcamelCaseの名前を持つJavaScriptオブジェクトで、ほぼCSSに対応しています。レイアウトはflexboxを使いますが、いくつかのデフォルトが異なります。

React と React Native、どちらを先に学ぶべきですか?

多くの場合はReactが先です。React Native自身のドキュメントも、Reactのコンポーネント、JSX、props、stateを基礎として教えており、Webで練習したほうが結果をすぐ確認できます。

ReactのWebアプリとReact Nativeのアプリでコードを共有できますか?

ロジックは共有できます。型、APIクライアント、検証、DOMに触れないフックなどです。画面やコンポーネントは描画するプリミティブが異なるため、通常は共有できません。

React Native は本物のネイティブアプリを作りますか?

はい。React Nativeのドキュメントによると、実行時にコンポーネントに対応するAndroidとiOSのビューが作られるので、View はラッパーの中のWebページではなく、ネイティブのビューになります。

共有できるもの、できないもの

Web開発者がつまずくテキストとレイアウトの規則

どちらを選ぶべきか

1つのカードを両方で書く

コンポーネントのロジックは同一です。同じprops、同じ useState の呼び出し、同じハンドラーです。変わるのは要素とスタイリングだけです。

Web向けのReact

HTML要素、CSSクラス、onClick。ブラウザーはテキストの後にボタンを配置します。

iOS と Android 向けのReact Native

react-native の View、Text、Pressable、StyleSheet.create によるスタイル、そして onClick の代わりに onPress。

リスト:Webでは map()、スマートフォンでは FlatList

React Nativeで同じリストを書く

FlatList は画面の近くにあるものだけを描画するので、長いリストもなめらかです。keyExtractor が key プロパティの役割を果たします。

flexboxレイアウト、スタイル、タッチ操作を備えたコンテナーです。スクロールはしません。

テキストはすべて Text の中に置く必要があります。入れ子の Text はスタイルを継承します。見出しタグはありません。

ネットワーク画像には幅と高さの明示が必要です。ローカルファイルは require() を使います。

onChangeText はイベントではなく、新しい文字列を直接渡します。

multiline プロパティで複数行のテキストを入力できます。

入力したテキストを隠します。multiline とは併用できません。

制御された真偽値の入力です。onValueChange で value を更新します。

Button は title プロパティを受け取り、Pressable はタップ可能にしたい任意の子要素を包みます。

Pressable には onPressIn、onPressOut、onLongPress もあります。

子要素をすべて一度に描画するので、短いコンテンツに使いましょう。

長いリストを効率よく描画します。data と renderItem が必要で、keyExtractor で各キーを設定します。

ブラウザーなど、インストール済みのアプリでURLを開きます。タップできるリンクにするには Pressable で包みます。

スタイルはオブジェクトで、通常は StyleSheet.create で定義します。配列を渡すと組み合わせられ、最後のものが優先されます。

スタイル名はWebでのReactの style プロパティと同じくcamelCaseです。

すべての View はflexコンテナーで、指定しない限り子要素を縦に積み重ねます。

Web要素からReact Nativeへの対応表

要素、prop、CSSの考え方を検索

img、onClick、class...

{v} 行中 {n} 行を表示

一致するものがありません。div や input などのタグ名を試してください。

Web要素とReact Nativeでの対応部品

WebのReact

React Native

変わる点

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る