본 게시물은 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'));
src
src/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;
IonPage
IonPage
를 root Components
로 사용해야함IonContent
IonHeader
src/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;
IonBackButton
src/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