본 게시물은 Ionic 공식 홈페이지의 Intro Ionic React Quickstart를 따라하며 정리한 것입니다.
npm install -g @ionic/cli
ionic start myApp blank --type=react
cd myApp

ionic serve
src/index.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
srcsrc/index.tsx
import React from 'react';import ReactDOM from 'react-dom';import App from './App';src/App.tsx
import React from 'react';
import { Route } from 'react-router-dom';
import { IonApp, IonRouterOutlet } from '@ionic/react';
import { IonReactRouter } from '@ionic/react-router';
import Home from './pages/Home';
/* Core CSS required for Ionic components to work properly */
import '@ionic/react/css/core.css';
const App: React.FC = () => (
<IonApp>
<IonReactRouter>
<IonRouterOutlet>
<Route path="/home" component={Home} exact={true} />
<Route exact path="/" render={() => <Redirect to="/home" />} />
</IonRouterOutlet>
</IonReactRouter>
</IonApp>
);
import React from 'react';import { Route } from 'react-router-dom';import { IonApp, IonRouterOutlet } from '@ionic/react';import { IonReactRouter } from '@ionic/react-router';import Home from './pages/Home';import '@ionic/react/css/core.css';const App: React.FC = () => (...);/ 일 때 👉 /home으로 이동 👉 ./pages/Home에서 가져온 Home 보여줌!src/pages/Home.tsx

import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
import ExploreContainer from '../components/ExploreContainer';
import './Home.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Blank</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent fullscreen>
<IonHeader collapse="condense">
<IonToolbar>
<IonTitle size="large">Blank</IonTitle>
</IonToolbar>
</IonHeader>
<ExploreContainer />
</IonContent>
</IonPage>
);
};
export default Home;
IonPageIonPage를 root Components로 사용해야함IonContentIonHeadersrc/pages/Home.tsx

import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar,
IonList, IonItem, IonCheckbox, IonLabel, IonNote, IonBadge } from '@ionic/react'; ✅
import './Home.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Ionic Blank</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent> ✅
<IonList>
<IonItem>
<IonCheckbox slot="start" />
<IonLabel>
<h1>Create Idea</h1>
<IonNote>Run Idea by Brandy</IonNote>
</IonLabel>
<IonBadge color="success" slot="end">
5 Days
</IonBadge>
</IonItem>
</IonList>
</IonContent>
</IonPage>
);
};
export default Home;
IonCheckbox의 자체 닫힘 태그IonCheckbox를 배치할 위치를 알려줌src/pages/Home.tsx

import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar,
IonList, IonItem, IonCheckbox, IonLabel, IonNote, IonBadge,
IonFab, IonFabButton, IonIcon } from '@ionic/react'; ✅
import './Home.css';
import { add } from 'ionicons/icons'; ✅
const Home: React.FC = () => {
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Ionic Blank</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
<IonList>
<IonItem>
<IonCheckbox slot="start" />
<IonLabel>
<h1>Create Idea</h1>
<IonNote>Run Idea by Brandy</IonNote>
</IonLabel>
<IonBadge color="success" slot="end">
5 Days
</IonBadge>
</IonItem>
</IonList>
<IonFab vertical="bottom" horizontal="end" slot="fixed"> ✅
<IonFabButton>
<IonIcon icon={add} />
</IonFabButton>
</IonFab>
</IonContent>
</IonPage>
);
};
export default Home;
<IonFab vertical="bottom" horizontal="end" slot="fixed">src/pages/Home.tsx

import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar,
IonList, IonItem, IonCheckbox, IonLabel, IonNote, IonBadge,
IonFab, IonFabButton, IonIcon } from '@ionic/react';
import './Home.css';
import { add } from 'ionicons/icons';
import { RouteComponentProps } from 'react-router'; ✅
const Home: React.FC<RouteComponentProps> = (props) => { ✅
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Ionic Blank</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
<IonList>
<IonItem>
<IonCheckbox slot="start" />
<IonLabel>
<h1>Create Idea</h1>
<IonNote>Run Idea by Brandy</IonNote>
</IonLabel>
<IonBadge color="success" slot="end">
5 Days
</IonBadge>
</IonItem>
</IonList>
<IonFab vertical="bottom" horizontal="end" slot="fixed">
<IonFabButton onClick={() => props.history.push('/new')}> ✅
<IonIcon icon={add} />
</IonFabButton>
</IonFab>
</IonContent>
</IonPage>
);
};
export default Home;
<IonFabButton onClick={() => props.history.push('/new')}>src/App.tsx
...
import Home from './pages/Home';
import NewItem from './pages/NewItem'; ✅
...
const App: React.FC = () => {
const isAuthed = true;
return (
<IonApp>
<IonReactRouter>
<IonRouterOutlet>
<Route path="/home" component={Home} /> ✅
<Route path="/new" component={NewItem} /> ✅
<Redirect exact from="/" to="/home" /> ✅
</IonRouterOutlet>
</IonReactRouter>
</IonApp>
);
}
export default App;
src/pages/NewItem.tsx 새로 생성!

import { IonBackButton, IonButtons, IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
import React from 'react';
const NewItem: React.FC = () => {
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonButtons slot="start">
<IonBackButton />
</IonButtons>
<IonTitle>New Item</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent></IonContent>
</IonPage>
);
};
export default NewItem;
IonBackButtonsrc/pages/NewItem.tsx
...
<IonButtons slot="start">
<IonBackButton defaultHref="/home" /> ✅
</IonButtons>
...
import { camera } from 'ionicons/icons';
...
<IonIcon icon={camera} />
...
ionicons 패키지에서 원하는 아이콘을 가져와 icon prop을 통해 IonIcon 구성 요소에 전달하기만 하면 됨Capacitor를 사용함Capacitor는 (웹 표준을 지원하는 플랫폼에서) 네이티브 장치 기능에 액세스하면서ionic integrations enable capacitor
ionic capacitor add
ionic capacitor build