Create React AppしたReactアプリをReact Native for Web化する方法を解説します。
React Native for Webについてはこちらで解説していますので、ご参照ください。
React Native for Webとは何かについて解説
- ReactアプリをReact Native for Web化する方法がわかる
- react-native-webの基本の使い方がわかる
- React 17.0.2
- react-native-web 0.17.5
create-react-appでReactアプリを作成する
まずは、Create React AppでReactアプリを作成しましょう。
モグモグさん
すでに作成済みの方はスキップでOKです!
【入門】create-react-appでReactとTypeScript環境を構築
最低限画面が表示されるところまで進めましょう。
react-native-webパッケージを追加
続いて、react-native-webを追加しましょう。
$ yarn add react-native-web
// npmの方
$ npm install react-native-web
詳細なドキュメントはこちらを参照ください。
React Nativeのcomponentに変更
最後に、App.js(もしくは、App.tsx)
でReact Nativeのcomponentに変更します。
何も触っていない状態は下記のようなコードだと思います。(多少バージョンによって異なります)
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
こんな感じに書き換える
import logo from './logo.svg';
import { Image, StyleSheet, Text, View } from 'react-native';
function App() {
return (
<View style={styles.app}>
<View style={styles.appHeader} accessibilityRole="banner">
<Image source={logo} style={styles.appLogo} />
<Text style={styles.appText}>
Edit src/App.js and save to reload.
</Text>
<Text
href="https://reactjs.org"
accessibilityRole="link"
style={styles.appLink}>
Learn React
</Text>
</View>
</View>
);
}
const styles = StyleSheet.create({
app: {
textAlign: "center"
},
appLogo: {
height: "40vmin",
width: "40vmin",
},
appHeader: {
backgroundColor: "#282c34",
minHeight: "100vh",
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
fontSize: 'calc(10px + 2vmin)',
},
appText: {
color: "white",
fontSize: 'calc(10px + 2vmin)',
},
appLink: {
color: "#61dafb",
fontSize: 'calc(10px + 2vmin)',
}
})
export default App;
再度、ビルドしなおして、最初にビルドしたような画面が表示されていればOKです。
初期のスタイルと多少変わりますが、気になる方はスタイルを細かく修正してみましょう!
変更点
div
をView
に変更したりp
をText
に変更したりしています。
React Nativeのcomponentsのドキュメントはこちらです。
モグモグさん
TextInput
など他のcomponentを使ってみても理解が深まると思います。
スタイルもReact NativeのStyleSheet
を使う形に変更しています。
これで、React Native for Web化が完了です。
Create React Appではすでに、import { } from react-native
の箇所をimport { } from react-native-web
に変換するaliasがwebpackで設定されています。
これによってただimportするだけでよくなっています。
もし、独自でwebpack等も実装している場合はwebpack側で設定するかreact-native-web
からimportすることで実現できます。
モグモグさん
Viewをmain
やsection
などの特定のタグに変換したい場合は、accessibilityRole
を渡します。
こちらがマッピングなので参考にしてみてください!
まとめ
最後に要点を簡単にまとめておきます。
- Create React Appを行い、
react-native-web
ライブラリを追加 - React Nativeのcomponentsを使う形に変更
- Create React Appの場合は、aliasを設定しているので
react-native
をimportするだけでcomponentsが使える