If we know how to create React web apps but want to develop mobile apps, we can use the Ionic framework.
In this article, we’ll look at how to get started with mobile development with the Ionic framework with React.
Lifecycle Methods in Functional Components
Ionic for React comes with its own lifecycle hooks.
They include the useIonViewDidEnter
, useIonViewDidLeave
, useIonViewWillEnter
, and useIonViewWillLeave
hooks.
The useIonViewDidEnter
hook is run when the ionViewDidEnter
event is triggered.
It’s called every time the view is visible.
useIonViewDidLeave
is called when the ionViewDidLeave
event is triggered.
This event is triggered when the page is fully transitioned in.
Any logic that we might not normally do when the view is visible can go here.
The useIonViewWillEnter
hook is called when ionViewWillEnter
.
It’s called every time the component is navigated to.
The useIonViewWillLeave
callback can be used to run cleanup code.
We can put them all in a component by writing:
pages/Tab1.tsx
import React from 'react';
import { IonButton, IonCol, IonContent, IonGrid, IonHeader, IonPage, IonRow, IonText, IonTitle, IonToolbar, useIonViewDidEnter, useIonViewDidLeave, useIonViewWillEnter, useIonViewWillLeave } from '@ionic/react';
import './Tab1.css';
const Tab1: React.FC = () => {
useIonViewDidEnter(() => {
console.log('ionViewDidEnter event fired');
});
useIonViewDidLeave(() => {
console.log('ionViewDidLeave event fired');
});
useIonViewWillEnter(() => {
console.log('ionViewWillEnter event fired');
});
useIonViewWillLeave(() => {
console.log('ionViewWillLeave event fired');
});
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Tab 1</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent fullscreen>
<IonGrid>
<IonRow>
<IonText>hello world</IonText>
</IonRow>
</IonGrid>
</IonContent>
</IonPage>
);
};
export default Tab1;
React Navigation
We can add navigation to an Ionic React app with route components.
It comes with its own router to resolve the routes.
For example, we have:
App.tsx
import React from 'react';
import { Redirect, Route } from 'react-router-dom';
import {
IonApp,
IonIcon,
IonLabel,
IonRouterOutlet,
IonTabBar,
IonTabButton,
IonTabs
} from '@ionic/react';
import { IonReactRouter } from '@ionic/react-router';
import { ellipse, square, triangle } from 'ionicons/icons';
import Tab1 from './pages/Tab1';
import Tab2 from './pages/Tab2';
import Tab3 from './pages/Tab3';
/* Core CSS required for Ionic components to work properly */
import '@ionic/react/css/core.css';
/* Basic CSS for apps built with Ionic */
import '@ionic/react/css/normalize.css';
import '@ionic/react/css/structure.css';
import '@ionic/react/css/typography.css';
/* Optional CSS utils that can be commented out */
import '@ionic/react/css/padding.css';
import '@ionic/react/css/float-elements.css';
import '@ionic/react/css/text-alignment.css';
import '@ionic/react/css/text-transformation.css';
import '@ionic/react/css/flex-utils.css';
import '@ionic/react/css/display.css';
/* Theme variables */
import './theme/variables.css';
const App: React.FC = () => (
<IonApp>
<IonReactRouter>
<IonTabs>
<IonRouterOutlet>
<Route path="/tab1" component={Tab1} exact={true} />
<Route path="/tab2" component={Tab2} exact={true} />
<Route path="/tab3" component={Tab3} />
<Route path="/" render={() => <Redirect to="/tab1" />} exact={true} />
</IonRouterOutlet>
<IonTabBar slot="bottom">
<IonTabButton tab="tab1" href="/tab1">
<IonIcon icon={triangle} />
<IonLabel>Tab 1</IonLabel>
</IonTabButton>
<IonTabButton tab="tab2" href="/tab2">
<IonIcon icon={ellipse} />
<IonLabel>Tab 2</IonLabel>
</IonTabButton>
<IonTabButton tab="tab3" href="/tab3">
<IonIcon icon={square} />
<IonLabel>Tab 3</IonLabel>
</IonTabButton>
</IonTabBar>
</IonTabs>
</IonReactRouter>
</IonApp>
);
export default App;
We have the Route
components in the IonRouterOutlet
to add our route components.
path
has the URLs, component
has the component to show when we reach the route. exact
set to true
means we match the exact URL.
Then to add navigation buttons, we add the IonTabButton
components with the href
prop set to the URL for the paths.
Conclusion
We can add lifecycle hooks and routes with Ionic React.