Loading...
Loading...
Guides the agent through Capacitor app development with React — project structure, hooks for native features, state management patterns, using Capacitor plugins in React components, and React-specific best practices. Do not use for Ionic Framework with React (use ionic-react), migrating or upgrading Capacitor apps or plugins, or non-React frameworks.
npx skill4agent add capawesome-team/skills capacitor-reactpackage.jsonreactreact-dom@capacitor/coreandroid/ios/vite.config.tsnext.config.jswebpack.config.jspackage.jsonvite.config.tsnext.config.jsremix.config.js@capacitor/corepackage.jsonreactpackage.jsontsconfig.json.tsxandroid/ios/capacitor.config.tscapacitor.config.jsonpackage.jsonredux@reduxjs/toolkitzustandjotai@tanstack/react-querypackage.jsonreact-router-dom@tanstack/react-routerproject-root/
├── android/ # Android native project (generated by Capacitor)
├── ios/ # iOS native project (generated by Capacitor)
├── public/
├── src/
│ ├── components/ # Reusable UI components
│ ├── hooks/ # Custom React hooks (including native feature hooks)
│ ├── pages/ # Page/route components
│ ├── services/ # Service modules for Capacitor plugin calls
│ ├── App.tsx # Root component
│ └── main.tsx # Entry point
├── capacitor.config.ts # Capacitor configuration
├── package.json
├── tsconfig.json
└── vite.config.ts # Or other bundler configreferences/plugin-usage-patterns.mduseEffectuseEffectCapacitor.isNativePlatform()Capacitor.getPlatform()references/custom-hooks.mdsrc/hooks/useStateuseReducerreact-router-domappUrlOpen@capacitor/appuseEffectuseNavigate()import { useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { App, URLOpenListenerEvent } from '@capacitor/app';
const useDeepLinks = () => {
const navigate = useNavigate();
useEffect(() => {
const listener = App.addListener('appUrlOpen', (event: URLOpenListenerEvent) => {
const path = new URL(event.url).pathname;
navigate(path);
});
return () => {
listener.then(handle => handle.remove());
};
}, [navigate]);
};backButton@capacitor/appimport { useEffect } from 'react';
import { useNavigate, useLocation } from 'react-router-dom';
import { App } from '@capacitor/app';
const useBackButton = () => {
const navigate = useNavigate();
const location = useLocation();
useEffect(() => {
const listener = App.addListener('backButton', ({ canGoBack }) => {
if (canGoBack) {
navigate(-1);
} else {
App.exitApp();
}
});
return () => {
listener.then(handle => handle.remove());
};
}, [navigate, location]);
};Capacitor.getPlatform()Capacitor.isNativePlatform()import { Capacitor } from '@capacitor/core';
const MyComponent: React.FC = () => {
const platform = Capacitor.getPlatform(); // 'ios' | 'android' | 'web'
const isNative = Capacitor.isNativePlatform();
return (
<div>
{platform === 'ios' && <IOSSpecificComponent />}
{platform === 'android' && <AndroidSpecificComponent />}
{!isNative && <WebFallbackComponent />}
</div>
);
};import { Capacitor } from '@capacitor/core';
export const usePlatform = () => {
return {
platform: Capacitor.getPlatform(),
isNative: Capacitor.isNativePlatform(),
isIOS: Capacitor.getPlatform() === 'ios',
isAndroid: Capacitor.getPlatform() === 'android',
isWeb: Capacitor.getPlatform() === 'web',
};
};@capacitor/appimport { useEffect } from 'react';
import { App } from '@capacitor/app';
const useAppState = (onResume?: () => void, onPause?: () => void) => {
useEffect(() => {
const resumeListener = App.addListener('resume', () => {
onResume?.();
});
const pauseListener = App.addListener('pause', () => {
onPause?.();
});
return () => {
resumeListener.then(handle => handle.remove());
pauseListener.then(handle => handle.remove());
};
}, [onResume, onPause]);
};npm run build
npx cap sync
npx cap run android
npx cap run iosnpx cap run android --livereload --external
npx cap run ios --livereload --external--external--livereloadnpx cap syncpackage.jsonCapacitor is not defined@capacitor/corenpm install @capacitor/coreCapacitor.isNativePlatform()@capacitor/camerauseEffectremove()useRefuseEffect--externalnpx cap runwindow.localStoragenavigator.geolocation@capacitor/preferences@capacitor/geolocationionic-react@ionic/reactcapacitor-angularcapacitor-app-upgradescapacitor-pluginscapacitor-push-notifications