Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Deep integration with React Native ecosystem for cross-platform mobile development
.claude/skills/a5c-ai-react-native-development/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 542% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 66% | 0% |
This skill provides deep integration with the React Native ecosystem for cross-platform mobile development. It enables execution of React Native CLI commands, component generation, build optimization, and comprehensive debugging capabilities.
bash - Execute React Native CLI, Expo CLI, and npm/yarn commandsread - Analyze React Native project files, configurations, and componentswrite - Generate and modify React Native components and configurationsedit - Update existing React Native code and configurationsglob - Search for React Native components and configuration filesgrep - Search for patterns in React Native codebaseThis skill integrates with the following processes:
react-native-app-setup.js - Project initialization and configurationcross-platform-ui-library.js - Shared component developmentmobile-testing-strategy.js - Test implementation and coveragemobile-performance-optimization.js - Performance tuningnpx react-native)npx expo)project-root/
├── src/
│ ├── components/
│ ├── screens/
│ ├── navigation/
│ ├── store/
│ ├── hooks/
│ ├── services/
│ ├── utils/
│ └── types/
├── __tests__/
├── android/
├── ios/
├── metro.config.js
├── babel.config.js
├── tsconfig.json
└── package.jsonjavascript// metro.config.js const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); const config = { transformer: { getTransformOptions: async () => ({ transform: { experimentalImportSupport: false, inlineRequires: true, }, }), }, }; module.exports = mergeConfig(getDefaultConfig(__dirname), config);
bash# Create new React Native project npx react-native init MyApp --template react-native-template-typescript # Or with Expo npx create-expo-app MyApp --template expo-template-blank-typescript
typescript// src/components/Button/Button.tsx import React from 'react'; import { TouchableOpacity, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native'; interface ButtonProps { title: string; onPress: () => void; variant?: 'primary' | 'secondary'; disabled?: boolean; } export const Button: React.FC<ButtonProps> = ({ title, onPress, variant = 'primary', disabled = false, }) => { return ( <TouchableOpacity style={[styles.button, styles[variant], disabled && styles.disabled]} onPress={onPress} disabled={disabled} activeOpacity={0.8} > <Text style={[styles.text, styles[`${variant}Text`]]}>{title}</Text> </TouchableOpacity> ); }; const styles = StyleSheet.create({ button: { paddingVertical: 12, paddingHorizontal: 24, borderRadius: 8, alignItems: 'center', }, primary: { backgroundColor: '#007AFF', }, secondary: { backgroundColor: 'transparent', borderWidth: 1, borderColor: '#007AFF', }, disabled: { opacity: 0.5, }, text: { fontSize: 16, fontWeight: '600', }, primaryText: { color: '#FFFFFF', }, secondaryText: { color: '#007AFF', }, });
typescript// src/navigation/RootNavigator.tsx import React from 'react'; import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { HomeScreen } from '../screens/HomeScreen'; import { DetailsScreen } from '../screens/DetailsScreen'; export type RootStackParamList = { Home: undefined; Details: { id: string }; }; const Stack = createNativeStackNavigator<RootStackParamList>(); export const RootNavigator: React.FC = () => { return ( <NavigationContainer> <Stack.Navigator initialRouteName="Home"> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Details" component={DetailsScreen} /> </Stack.Navigator> </NavigationContainer> ); };
typescript// src/store/store.ts import { configureStore } from '@reduxjs/toolkit'; import { setupListeners } from '@reduxjs/toolkit/query'; import { api } from './api'; import userReducer from './slices/userSlice'; export const store = configureStore({ reducer: { user: userReducer, [api.reducerPath]: api.reducer, }, middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware), }); setupListeners(store.dispatch); export type RootState = ReturnType<typeof store.getState>; export type AppDispatch = typeof store.dispatch;
bash npx react-native start --reset-cache
bash cd ios && pod install --repo-update
bash cd android && ./gradlew clean
bash npx react-native link # Or for newer versions, use autolinking
flutter-dart - Alternative cross-platform frameworkmobile-testing - Comprehensive testing frameworksmobile-perf - Performance profiling and optimizationpush-notifications - Push notification implementation| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 4,348 | 5,662 | +30% | 1 | 1 | 0% | 777 | 2,610 | +236% | 0 | 0 | — |
case-02 | fail→pass | 2,409 | 2,331 | -3% | 1 | 1 | 0% | 380 | 2,439 | +542% | 0 | 0 | — |
case-03 | pass→pass | 3,058 | 3,451 | +13% | 1 | 1 | 0% | 483 | 2,685 | +456% | 0 | 0 | — |
case-04 | pass→pass | 11,801 | 13,056 | +11% | 1 | 1 | 0% | 2,590 | 4,550 | +76% | 0 | 0 | — |
case-05 | pass→pass | 9,457 | 6,943 | -27% | 1 | 1 | 0% | 1,997 | 3,636 | +82% | 0 | 0 | — |
case-06 | pass→pass | 7,520 | 4,966 | -34% | 1 | 1 | 0% | 1,154 | 3,165 | +174% | 0 | 0 | — |
case-07 | pass→pass | 14,297 | 16,120 | +13% | 1 | 1 | 0% | 2,699 | 5,332 | +98% | 0 | 0 | — |
case-08 | pass→pass | 8,803 | 6,654 | -24% | 1 | 1 | 0% | 1,494 | 3,408 | +128% | 0 | 0 | — |
case-09 | pass→pass | 13,444 | 7,625 | -43% | 1 | 1 | 0% | 2,212 | 3,246 | +47% | 0 | 0 | — |
case-10 | pass→pass | 10,490 | 3,027 | -71% | 1 | 1 | 0% | 1,708 | 2,694 | +58% | 0 | 0 | — |
case-11 | fail→pass | 12,635 | 5,067 | -60% | 1 | 1 | 0% | 2,046 | 2,954 | +44% | 0 | 0 | — |
case-12 | fail→pass | 13,269 | 2,421 | -82% | 1 | 1 | 0% | 2,033 | 2,583 | +27% | 0 | 0 | — |
case-13 | fail→pass | 7,936 | 5,996 | -24% | 1 | 1 | 0% | 1,342 | 3,176 | +137% | 0 | 0 | — |
case-14 | fail→fail | 7,152 | 7,968 | +11% | 1 | 1 | 0% | 1,355 | 2,567 | +89% | 0 | 0 | — |
case-15 | fail→pass | 16,157 | 12,805 | -21% | 1 | 1 | 0% | 2,537 | 4,201 | +66% | 0 | 0 | — |
case-16 | pass→pass | 11,025 | 10,191 | -8% | 1 | 1 | 0% | 2,152 | 4,103 | +91% | 0 | 0 | — |
case-17 | pass→pass | 12,165 | 2,854 | -77% | 1 | 1 | 0% | 2,162 | 2,509 | +16% | 0 | 0 | — |
case-18 | pass→pass | 12,483 | 9,103 | -27% | 1 | 1 | 0% | 1,840 | 3,726 | +102% | 0 | 0 | — |
case-19 | pass→pass | 2,267 | 1,370 | -40% | 1 | 1 | 0% | 352 | 2,376 | +575% | 0 | 0 | — |
case-20 | pass→pass | 10,252 | 15,170 | +48% | 1 | 1 | 0% | 2,086 | 5,148 | +147% | 0 | 0 | — |
case-21 | pass→pass | 10,077 | 9,834 | -2% | 1 | 1 | 0% | 1,975 | 4,126 | +109% | 0 | 0 | — |
case-22 | pass→pass | 13,526 | 20,030 | +48% | 1 | 1 | 0% | 2,435 | 6,404 | +163% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.