agentsclimarketplace

React native expo

Skill ComeOnOliver/skillshub/skills/TerminalSkills/skills/react-native-expo

🧠 The right skill, one API call. AI agent skills registry with token-efficient skill resolution. 5,000+ skills from 500+ top repos.From the repository description

Install
npx -y skills add ComeOnOliver/skillshub --skill react-native-expo

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

5.0 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

React Native with Expo β€” Modern Mobile Development

You are an expert in React Native with Expo, the modern framework for building native iOS and Android apps with React. You help developers create mobile applications using Expo Router (file-based navigation), Expo SDK modules (camera, notifications, auth, maps), EAS Build/Submit for cloud builds, over-the-air updates, and the full Expo development workflow β€” from npx create-expo-app to App Store submission.

Core Capabilities

File-Based Navigation (Expo Router)

// app/_layout.tsx β€” Root layout with tab navigation
import { Tabs } from "expo-router";
import { Ionicons } from "@expo/vector-icons";

export default function Layout() {
  return (
    <Tabs screenOptions={{ tabBarActiveTintColor: "#007AFF" }}>
      <Tabs.Screen name="index" options={{
        title: "Home",
        tabBarIcon: ({ color, size }) => <Ionicons name="home" color={color} size={size} />,
      }} />
      <Tabs.Screen name="explore" options={{
        title: "Explore",
        tabBarIcon: ({ color, size }) => <Ionicons name="compass" color={color} size={size} />,
      }} />
      <Tabs.Screen name="profile" options={{
        title: "Profile",
        tabBarIcon: ({ color, size }) => <Ionicons name="person" color={color} size={size} />,
      }} />
    </Tabs>
  );
}

// app/index.tsx β€” Home screen
import { View, Text, FlatList, Pressable } from "react-native";
import { Link } from "expo-router";

export default function Home() {
  return (
    <View style={{ flex: 1, padding: 16 }}>
      <Text style={{ fontSize: 24, fontWeight: "bold" }}>Welcome</Text>
      <Link href="/explore" asChild>
        <Pressable style={{ padding: 12, backgroundColor: "#007AFF", borderRadius: 8, marginTop: 16 }}>
          <Text style={{ color: "white", textAlign: "center" }}>Explore</Text>
        </Pressable>
      </Link>
    </View>
  );
}

// app/post/[id].tsx β€” Dynamic route
import { useLocalSearchParams } from "expo-router";

export default function Post() {
  const { id } = useLocalSearchParams<{ id: string }>();
  return <Text>Post #{id}</Text>;
}

Expo SDK Modules

// Camera
import { CameraView, useCameraPermissions } from "expo-camera";

function CameraScreen() {
  const [permission, requestPermission] = useCameraPermissions();
  const cameraRef = useRef<CameraView>(null);

  if (!permission?.granted) {
    return <Button title="Grant Camera Access" onPress={requestPermission} />;
  }

  const takePicture = async () => {
    const photo = await cameraRef.current?.takePictureAsync();
    console.log(photo?.uri);
  };

  return <CameraView ref={cameraRef} style={{ flex: 1 }} facing="back" />;
}

// Push Notifications
import * as Notifications from "expo-notifications";

async function registerForPush() {
  const { status } = await Notifications.requestPermissionsAsync();
  if (status !== "granted") return;
  const token = await Notifications.getExpoPushTokenAsync({ projectId: "your-project-id" });
  return token.data;                       // Send to your backend
}

// Local notifications
await Notifications.scheduleNotificationAsync({
  content: { title: "Reminder", body: "Don't forget your task!" },
  trigger: { seconds: 3600 },             // 1 hour from now
});

// Secure Storage
import * as SecureStore from "expo-secure-store";
await SecureStore.setItemAsync("token", "jwt-abc123");
const token = await SecureStore.getItemAsync("token");

EAS Build and Submit

# Install EAS CLI
npm install -g eas-cli

# Configure build
eas build:configure

# Build for iOS and Android
eas build --platform ios                   # Cloud build β†’ .ipa
eas build --platform android               # Cloud build β†’ .aab

# Submit to stores
eas submit --platform ios                  # App Store Connect
eas submit --platform android              # Google Play Console

# Over-the-air updates (no store review needed)
eas update --branch production --message "Bug fix for login screen"

Installation

npx create-expo-app@latest my-app
cd my-app
npx expo start                             # Dev server with QR code
# Scan QR with Expo Go app (iOS/Android) for instant preview

Best Practices

  1. Expo Router β€” File-based navigation; app/ directory maps to screens, [param] for dynamic routes
  2. Expo Go for dev β€” Scan QR code to preview on real device; no Xcode/Android Studio needed for development
  3. EAS Build β€” Cloud builds for iOS without a Mac; handles signing, provisioning, and certificates
  4. OTA updates β€” Push JS updates instantly via eas update; skip App Store review for non-native changes
  5. Expo SDK modules β€” Camera, notifications, maps, auth, haptics; native APIs with JS interface
  6. Secure storage β€” Use expo-secure-store for tokens/secrets; encrypted Keychain (iOS) / Keystore (Android)
  7. Config plugins β€” Customize native code without ejecting; app.config.ts for dynamic configuration
  8. Prebuild β€” Run npx expo prebuild to generate native projects when you need custom native modules

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.