Ionic4とReact
Reactで構築されたモバイルアプリケーションは、通常、選択したライブラリにReactNativeを使用します。 Ionicにも同様の使命がありますが、それを達成する方法は異なります。
Stencil Web Component コンパイラで構築された、プラグインシステムを取り巻くすべてのIonicコンポーネントおよびは、任意のJavaScriptプロジェクトに組み込むことができます。
これの最も良い点は、独自のビルドシステムを維持し、Ionicを使用してプロジェクトを「拡張」できることです。 Create React App を使用してReactプロジェクトを作成することで、これを確認します。
新しいReactプロジェクトを作成する
create-react-app
で新しいReactプロジェクトを作成するには、 npx を使用するか、create-react-app
をグローバルにインストールします。
# Create new project without install
$ npx create-react-app react-ionic --typescript
# OR
$ npm install create-react-app -g
$ create-react-app react-ionic --typescript
# Open the project in VS Code or your editor of your choice
$ cd react-ionic
$ code .
# Run the project in the browser
$ npm run start
--typescript
フラグを使用して、CreateReactAppでTypeScriptプロジェクトを生成できるようになりました。
ReactアプリにIonicをインストールする
次に、Ionic for React(@ionic/react
)とその周辺の依存関係をインストールする必要があります。 Reactの場合、Ionicは現在react-router
に依存しているため、これもインストールする必要があります。
$ npm install @ionic/core @ionic/react react-router react-router-dom @types/react-router @types/react-router-dom
この記事の執筆時点では、@ionic/react
はまだベータ版であることに注意してください。
ReactでIonicを使用する
この段階では、プロジェクトの他の依存関係と同じようにIonicを使用できます。 各コンポーネントは個別にエクスポートされており、そのままインポートできます。
まず、index.tsx
に移動し、@ionic/core
内に適切なスタイルを追加します。
import React from 'react';
import ReactDOM from 'react-dom';
// Ionic 4 styles
import '@ionic/core/css/core.css';
import '@ionic/core/css/ionic.bundle.css';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
serviceWorker.unregister();
次に、App.tsx
内で、Ionicコンポーネントをインポートして、好きなように使用できます。
import {
IonApp,
IonButton,
IonCard,
IonCardContent,
IonCardHeader,
IonCardSubtitle,
IonCardTitle,
IonContent,
IonHeader,
IonTitle,
IonToolbar,
} from '@ionic/react';
import React, { Component } from 'react';
class App extends Component {
state = {
chomps: 0,
};
unchomp = () => {
if (this.state.chomps > 0) {
this.setState({
chomps: this.state.chomps -= 1,
});
}
};
chomp = () => {
this.setState({
chomps: this.state.chomps += 1,
});
};
render() {
return (
<IonApp>
<IonHeader>
<IonToolbar color="primary">
<IonTitle>Alligator</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
<IonCard>
<img src="https://images.unsplash.com/photo-1549240923-93a2e080e653?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2165&q=80" />
<IonCardHeader>
<IonCardSubtitle>Crocco</IonCardSubtitle>
<IonCardTitle>
You've been chomped {this.state.chomps} times!
</IonCardTitle>
</IonCardHeader>
<IonCardContent>
<IonButton onClick={this.chomp}>Chomp</IonButton>
<IonButton onClick={this.unchomp}>UnChomp</IonButton>
</IonCardContent>
</IonCard>
</IonContent>
</IonApp>
);
}
}
export default App;
これが私たちの努力の結果です: