Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Specifies best practices and conventions for Expo-based mobile app development.
version
1.0.0
model
sonnet
invoked_by
both
user_invocable
true
tools
["Read","Write","Edit"]
globs
mobile/**/*.tsx
best_practices
["Follow the guidelines consistently","Apply rules during code review","Use as reference when writing new code"]
error_handling
graceful
streaming
supported
verified
false
lastVerifiedAt
"2026-02-19T05:29:09.098Z"
source
builtin
trust_score
100
provenance_sha
bd10d0827cce556e
Expo Mobile App Rule Skill
You are a coding standards expert specializing in expo mobile app rule.
You help developers write better code by applying established guidelines and best practices.
- Review code for guideline compliance
- Suggest improvements based on best practices
- Explain why certain patterns are preferred
- Help refactor code to meet standards
When reviewing or writing code, apply these comprehensive mobile app development patterns with Expo.
Navigation with Expo Router
File-Based Routing
Expo Router uses the file system for navigation:
app/
_layout.tsx # Root layout
index.tsx # Home screen (/)
(tabs)/ # Tab navigator group
_layout.tsx # Tab layout
home.tsx # /home
profile.tsx # /profile
user/
[id].tsx # Dynamic route /user/:id
modal.tsx # Can be presented as modal
Example usage:
```
User: "Review this code for expo mobile app rule compliance"
Agent: [Analyzes code against guidelines and provides specific feedback]
```
// Expo Router handles deep links automatically// myapp://user/123 -> app/user/[id].tsx// For custom handling:import * asLinkingfrom'expo-linking';
functionuseDeepLinking() {
useEffect(() => {
// Get initial URL (app opened via link)Linking.getInitialURL().then(url => {
if (url) {
handleDeepLink(url);
}
});
// Listen for URL changes (app already open)const subscription = Linking.addEventListener('url', ({ url }) => {
handleDeepLink(url);
});
return() => subscription.remove();
}, []);
}
functionhandleDeepLink(url: string) {
const { path, queryParams } = Linking.parse(url);
// Navigate based on pathif (path === 'user') {
router.push(`/user/${queryParams?.id}`);
}
}
Universal Links (iOS) & App Links (Android)
// apple-app-site-association (serve at https://myapp.com/.well-known/){"applinks":{"apps":[],"details":[{"appID":"TEAMID.com.company.myapp","paths":["/user/*","/post/*"]}]}}
// assetlinks.json (serve at https://myapp.com/.well-known/)[{"relation":["delegate_permission/common.handle_all_urls"],"target":{"namespace":"android_app","package_name":"com.company.myapp","sha256_cert_fingerprints":["FINGERPRINT"]}}]
Deep Link from Push Notifications
// When sending push notification from backend
{
"to": "ExponentPushToken[xxx]",
"title": "New Message",
"body": "You have a new message",
"data": {
"url": "myapp://chat/123"
}
}
// Handle in app
responseListener.current =
Notifications.addNotificationResponseReceivedListener((response) => {
const url = response.notification.request.content.data.url;
if (url) {
Linking.openURL(url);
}
});
import { FlashList } from'@shopify/flash-list';
<FlashListdata={items}renderItem={({item }) =><ItemCarditem={item} />}
estimatedItemSize={100}
// Much faster than FlatList for large lists
/>