TheOne Studio React Native Development Standards
⚠️ React Native Latest + TypeScript: All patterns use latest React Native with TypeScript strict mode, Expo SDK 51+, and modern React 18+ patterns.
Skill Purpose
This skill enforces TheOne Studio's comprehensive React Native development standards with CODE QUALITY FIRST:
Priority 1: Code Quality & Hygiene (MOST IMPORTANT)
- TypeScript strict mode, ESLint + Prettier enforcement
- Path aliases (@/), throw errors (never suppress), structured logging
- No any types, proper error boundaries, consistent imports
- File naming conventions, no inline styles in JSX
Priority 2: Modern React & TypeScript
- Functional components with Hooks (NO class components)
- Custom hooks for logic reuse, proper memoization
- Type-safe props, generics, discriminated unions
- useCallback/useMemo for performance
Priority 3: React Native Architecture
- Zustand/Jotai for state (document both, require consistency per project)
- Expo Router (file-based) OR React Navigation 7
- FlatList optimization (NEVER ScrollView + map)
- Platform-specific code (.ios.tsx/.android.tsx)
Priority 4: Mobile Performance
- List rendering optimization (getItemLayout, keyExtractor)
- Prevent unnecessary rerenders (React.memo, shouldComponentUpdate)
- Lazy loading, code splitting, bundle optimization
- Memory leak prevention (cleanup effects)
When This Skill Triggers
- Writing or refactoring React Native TypeScript code
- Implementing mobile UI components or features
- Working with state management (Zustand/Jotai)
- Implementing navigation flows (Expo Router/React Navigation)
- Optimizing list rendering or app performance
- Reviewing React Native pull requests
- Setting up project architecture or conventions
Quick Reference Guide
What Do You Need Help With?
| Priority |
Task |
Reference |
| 🔴 PRIORITY 1: Code Quality (Check FIRST) |
|
|
| 1 |
TypeScript strict, ESLint, Prettier, no any types |
Quality & Hygiene ⭐ |
| 1 |
Path aliases (@/), structured logging, error handling |
Quality & Hygiene ⭐ |
| 1 |
File naming, no inline styles, consistent imports |
Quality & Hygiene ⭐ |
| 🟡 PRIORITY 2: Modern React/TypeScript |
|
|
| 2 |
Functional components, Hooks rules, custom hooks |
Modern React |
| 2 |
useCallback, useMemo, React.memo optimization |
Modern React |
| 2 |
Type-safe props, generics, utility types |
TypeScript Patterns |
| 2 |
Discriminated unions, type guards, inference |
TypeScript Patterns |
| 🟢 PRIORITY 3: React Native Architecture |
|
|
| 3 |
Functional components, composition, HOCs |
Component Patterns |
| 3 |
Zustand patterns, Jotai atoms, persistence |
State Management |
| 3 |
Expo Router (file-based), React Navigation setup |
Navigation |
| 3 |
Platform checks, .ios/.android files, Platform module |
Platform-Specific |
| 🔵 PRIORITY 4: Performance |
|
|
| 4 |
FlatList optimization, getItemLayout, keyExtractor |
Performance |
| 4 |
Rerender prevention, React.memo, useMemo |
Performance |
| 4 |
Architecture violations (components, state, navigation) |
Architecture Review |
| 4 |
TypeScript quality, hooks violations, ESLint |
Quality Review |
| 4 |
List optimization, memory leaks, unnecessary rerenders |
Performance Review |
🔴 CRITICAL: Code Quality Rules (CHECK FIRST!)
⚠️ MANDATORY QUALITY STANDARDS
ALWAYS enforce these BEFORE writing any code:
- TypeScript strict mode - Enable all strict compiler options
- ESLint + Prettier - Enforce linting and formatting
- No any types - Use proper types or unknown
- Path aliases - Use @/ for src/ imports
- Throw errors - NEVER suppress errors with try/catch + console.log
- Structured logging - Use logger utility, not raw console.log
- Error boundaries - Wrap components with ErrorBoundary
- Consistent imports - React first, then libraries, then local
- File naming - kebab-case for files, PascalCase for components
- No inline styles in JSX - Define styles outside component or use StyleSheet
Example: Enforce Quality First
// ✅ EXCELLENT: All quality rules enforced
// 1. TypeScript strict mode in tsconfig.json
// {
// "compilerOptions": {
// "strict": true,
// "noImplicitAny": true,
// "strictNullChecks": true
// }
// }
// 2. Import order: React → libraries → local
import React, { useCallback, useMemo } from 'react'; // React first
import { View, Text, StyleSheet } from 'react-native'; // Libraries
import { useStore } from '@/stores/user-store'; // Local with path alias
// 3. Type-safe props (no any)
interface UserProfileProps {
userId: string;
onPress?: () => void;
}
// 4. Functional component with typed props
export const UserProfile: React.FC<UserProfileProps> = ({ userId, onPress }) => {
const user = useStore((state) => state.users[userId]);
// 5. Throw errors (not console.log)
if (!user) {
throw new Error(`User not found: ${userId}`);
}
// 6. Structured logging
const handlePress = useCallback(() => {
logger.info('User profile pressed', { userId });
onPress?.();
}, [userId, onPress]);
return (
<View style={styles.container}>
<Text style={styles.name}>{user.name}</Text>
</View>
);
};
// 7. No inline styles - use StyleSheet
const styles = StyleSheet.create({
container: {
padding: 16,
},
name: {
fontSize: 18,
fontWeight: 'bold',
},
});
⚠️ React Native Architecture Rules (AFTER Quality)
Choose Consistent State Management
Choose ONE state management solution per project:
Option 1: Zustand (Recommended for Simple State)
- ✅ Minimal boilerplate, hooks-based
- ✅ Perfect for app-level state (user, settings)
- ✅ Easy to test, TypeScript-friendly
Option 2: Jotai (Recommended for Atomic State)
- ✅ Atomic state management
- ✅ Perfect for complex derived state
- ✅ Better for fine-grained reactivity
Universal Rules (Both Solutions):
- ✅ Use selectors to prevent unnecessary rerenders
- ✅ Keep state normalized (no nested objects)
- ✅ Persist state with async storage adapters
- ✅ NEVER use Redux (too much boilerplate)
Choose ONE Navigation Solution
Option 1: Expo Router (Recommended)
- ✅ File-based routing (app/ directory)
- ✅ Built-in TypeScript support
- ✅ Automatic deep linking
Option 2: React Navigation 7
- ✅ More control over navigation structure
- ✅ Better for complex navigation flows
- ✅ Proven stability
ALWAYS Use FlatList for Lists
NEVER use ScrollView + map for lists:
// ❌ BAD: ScrollView + map (terrible performance)
<ScrollView>
{items.map(item => <Item key={item.id} {...item} />)}
</ScrollView>
// ✅ GOOD: FlatList with proper optimization
<FlatList
data={items}
renderItem={({ item }) => <Item {...item} />}
keyExtractor={(item) => item.id}
getItemLayout={(data, index) => ({
length: ITEM_HEIGHT,
offset: ITEM_HEIGHT * index,
index,
})}
removeClippedSubviews
maxToRenderPerBatch={10}
windowSize={11}
/>
Quick Examples: ❌ BAD vs ✅ GOOD
Example 1: Component Structure
// ❌ BAD: Class component, inline styles, no types
class UserCard extends React.Component {
render() {
return (
<View style={{ padding: 10 }}>
<Text>{this.props.name}</Text>
</View>
);
}
}
// ✅ GOOD: Functional component, typed props, StyleSheet
interface UserCardProps {
name: string;
onPress?: () => void;
}
export const UserCard: React.FC<UserCardProps> = ({ name, onPress }) => {
return (
<View style={styles.container}>
<Text style={styles.name}>{name}</Text>
</View>
);
};
const styles = StyleSheet.create({
container: { padding: 10 },
name: { fontSize: 16 },
});
Example 2: State Management
// ❌ BAD: useState for app-level state
function App() {
const [user, setUser] = useState(null);
const [settings, setSettings] = useState({});
return <AppContent user={user} settings={settings} />;
}
// ✅ GOOD: Zustand for app-level state
import { create } from 'zustand';
interface AppState {
user: User | null;
settings: Settings;
setUser: (user: User | null) => void;
}
export const useAppStore = create<AppState>((set) => ({
user: null,
settings: {},
setUser: (user) => set({ user }),
}));
function App() {
const user = useAppStore((state) => state.user);
return <AppContent />;
}
Example 3: List Rendering
// ❌ BAD: ScrollView + map
<ScrollView>
{users.map(user => (
<UserCard key={user.id} user={user} />
))}
</ScrollView>
// ✅ GOOD: FlatList with optimization
const ITEM_HEIGHT = 80;
<FlatList
data={users}
renderItem={({ item }) => <UserCard user={item} />}
keyExtractor={(item) => item.id}
getItemLayout={(_, index) => ({
length: ITEM_HEIGHT,
offset: ITEM_HEIGHT * index,
index,
})}
/>
Common Mistakes to Avoid
🔴 Critical Mistakes
| Mistake |
Why It's Wrong |
Correct Approach |
| Using class components |
Outdated, verbose, no hooks |
Use functional components |
Using any type |
Defeats TypeScript safety |
Use proper types or unknown |
| Inline styles in JSX |
Poor performance, not reusable |
Use StyleSheet.create() |
| ScrollView + map for long lists |
Memory issues, poor performance |
Use FlatList with optimization |
| Direct console.log |
Not structured, no filtering |
Use logger utility |
🟡 Warning-Level Mistakes
| Mistake |
Why It's Wrong |
Correct Approach |
| Not using path aliases |
Ugly relative imports |
Configure @/ alias |
| Missing keyExtractor |
Poor list performance |
Always provide keyExtractor |
| Not memoizing callbacks |
Causes unnecessary rerenders |
Use useCallback |
| Platform checks in render |
Duplicated logic |
Use Platform-specific files |
| Not cleaning up effects |
Memory leaks |
Return cleanup function |
🟢 Optimization Opportunities
| Pattern |
Issue |
Optimization |
| Expensive calculations in render |
Recalculates every render |
Use useMemo |
| Props causing child rerenders |
Child rerenders unnecessarily |
Use React.memo |
| Large lists without optimization |
Slow scrolling |
Add getItemLayout |
| Deep object comparisons |
Expensive checks |
Use shallow equality |
| Large bundles |
Slow app startup |
Code splitting, lazy loading |
Code Review Checklist
Use this checklist when reviewing React Native code:
🔴 Critical Issues (Block Merge)
🟡 Important Issues (Request Changes)
🟢 Suggestions (Non-Blocking)
Framework Versions
Recommended Stack:
- React Native: 0.74+ (latest stable)
- Expo SDK: 51+ (if using Expo)
- TypeScript: 5.4+
- React: 18.2+
- Zustand: 4.5+ OR Jotai: 2.8+
- Expo Router: 3.5+ OR React Navigation: 7+
Development Tools:
- ESLint: 8.57+ with @react-native-community plugin
- Prettier: 3.2+
- Metro bundler (built-in)
- React DevTools: Latest
Reference Files Structure
All detailed patterns and examples are in reference files:
Language Patterns (TypeScript + React)
- Quality & Hygiene - TypeScript strict, ESLint, path aliases, error handling
- Modern React - Hooks, functional components, memoization
- TypeScript Patterns - Type-safe props, generics, utility types
Framework Patterns (React Native)
- Component Patterns - Functional components, composition, HOCs
- State Management - Zustand, Jotai, persistence
- Navigation Patterns - Expo Router, React Navigation, deep linking
- Platform-Specific - iOS/Android differences, platform files
- Performance Patterns - FlatList optimization, rerender prevention
Code Review Guidelines
- Architecture Review - Component violations, state issues
- Quality Review - TypeScript quality, hooks violations
- Performance Review - List optimization, memory leaks
1---2name: theone-react-native-standards3description: Enforces TheOne Studio React Native development standards including TypeScript patterns, React/Hooks best practices, React Native architecture (Zustand/Jotai, Expo Router), and mobile performance optimization. Triggers when writing, reviewing, or refactoring React Native code, implementing mobile features, working with state management/navigation, or reviewing pull requests.4---5
6# TheOne Studio React Native Development Standards
7
8⚠️ **React Native Latest + TypeScript:** All patterns use latest React Native with TypeScript strict mode, Expo SDK 51+, and modern React 18+ patterns.
9
10## Skill Purpose
11
12This skill enforces TheOne Studio's comprehensive React Native development standards with **CODE QUALITY FIRST**:
13
14**Priority 1: Code Quality & Hygiene** (MOST IMPORTANT)
15- TypeScript strict mode, ESLint + Prettier enforcement
16- Path aliases (@/), throw errors (never suppress), structured logging
17- No any types, proper error boundaries, consistent imports
18- File naming conventions, no inline styles in JSX
19
20**Priority 2: Modern React & TypeScript**
21- Functional components with Hooks (NO class components)
22- Custom hooks for logic reuse, proper memoization
23- Type-safe props, generics, discriminated unions
24- useCallback/useMemo for performance
25
26**Priority 3: React Native Architecture**
27- Zustand/Jotai for state (document both, require consistency per project)
28- Expo Router (file-based) OR React Navigation 7
29- FlatList optimization (NEVER ScrollView + map)
30- Platform-specific code (.ios.tsx/.android.tsx)
31
32**Priority 4: Mobile Performance**
33- List rendering optimization (getItemLayout, keyExtractor)
34- Prevent unnecessary rerenders (React.memo, shouldComponentUpdate)
35- Lazy loading, code splitting, bundle optimization
36- Memory leak prevention (cleanup effects)
37
38## When This Skill Triggers
39
40- Writing or refactoring React Native TypeScript code
41- Implementing mobile UI components or features
42- Working with state management (Zustand/Jotai)
43- Implementing navigation flows (Expo Router/React Navigation)
44- Optimizing list rendering or app performance
45- Reviewing React Native pull requests
46- Setting up project architecture or conventions
47
48## Quick Reference Guide
49
50### What Do You Need Help With?
51
52| Priority | Task | Reference |
53|----------|------|-----------|
54| **🔴 PRIORITY 1: Code Quality (Check FIRST)** | | |
55| 1 | TypeScript strict, ESLint, Prettier, no any types | [Quality & Hygiene](references/language/quality-hygiene.md) ⭐ |
56| 1 | Path aliases (@/), structured logging, error handling | [Quality & Hygiene](references/language/quality-hygiene.md) ⭐ |
57| 1 | File naming, no inline styles, consistent imports | [Quality & Hygiene](references/language/quality-hygiene.md) ⭐ |
58| **🟡 PRIORITY 2: Modern React/TypeScript** | | |
59| 2 | Functional components, Hooks rules, custom hooks | [Modern React](references/language/modern-react.md) |
60| 2 | useCallback, useMemo, React.memo optimization | [Modern React](references/language/modern-react.md) |
61| 2 | Type-safe props, generics, utility types | [TypeScript Patterns](references/language/typescript-patterns.md) |
62| 2 | Discriminated unions, type guards, inference | [TypeScript Patterns](references/language/typescript-patterns.md) |
63| **🟢 PRIORITY 3: React Native Architecture** | | |
64| 3 | Functional components, composition, HOCs | [Component Patterns](references/framework/component-patterns.md) |
65| 3 | Zustand patterns, Jotai atoms, persistence | [State Management](references/framework/state-management.md) |
66| 3 | Expo Router (file-based), React Navigation setup | [Navigation](references/framework/navigation-patterns.md) |
67| 3 | Platform checks, .ios/.android files, Platform module | [Platform-Specific](references/framework/platform-specific.md) |
68| **🔵 PRIORITY 4: Performance** | | |
69| 4 | FlatList optimization, getItemLayout, keyExtractor | [Performance](references/framework/performance-patterns.md) |
70| 4 | Rerender prevention, React.memo, useMemo | [Performance](references/framework/performance-patterns.md) |
71| 4 | Architecture violations (components, state, navigation) | [Architecture Review](references/review/architecture-review.md) |
72| 4 | TypeScript quality, hooks violations, ESLint | [Quality Review](references/review/quality-review.md) |
73| 4 | List optimization, memory leaks, unnecessary rerenders | [Performance Review](references/review/performance-review.md) |
74
75## 🔴 CRITICAL: Code Quality Rules (CHECK FIRST!)
76
77### ⚠️ MANDATORY QUALITY STANDARDS
78
79**ALWAYS enforce these BEFORE writing any code:**
80
811. **TypeScript strict mode** - Enable all strict compiler options
822. **ESLint + Prettier** - Enforce linting and formatting
833. **No any types** - Use proper types or unknown
844. **Path aliases** - Use @/ for src/ imports
855. **Throw errors** - NEVER suppress errors with try/catch + console.log
866. **Structured logging** - Use logger utility, not raw console.log
877. **Error boundaries** - Wrap components with ErrorBoundary
888. **Consistent imports** - React first, then libraries, then local
899. **File naming** - kebab-case for files, PascalCase for components
9010. **No inline styles in JSX** - Define styles outside component or use StyleSheet
91
92**Example: Enforce Quality First**
93
94```typescript
95// ✅ EXCELLENT: All quality rules enforced
96
97// 1. TypeScript strict mode in tsconfig.json
98// {
99// "compilerOptions": {
100// "strict": true,
101// "noImplicitAny": true,
102// "strictNullChecks": true
103// }
104// }
105
106// 2. Import order: React → libraries → local
107import React, { useCallback, useMemo } from 'react'; // React first
108import { View, Text, StyleSheet } from 'react-native'; // Libraries
109import { useStore } from '@/stores/user-store'; // Local with path alias
110
111// 3. Type-safe props (no any)
112interface UserProfileProps {
113 userId: string;
114 onPress?: () => void;
115}
116
117// 4. Functional component with typed props
118export const UserProfile: React.FC<UserProfileProps> = ({ userId, onPress }) => {
119 const user = useStore((state) => state.users[userId]);
120
121 // 5. Throw errors (not console.log)
122 if (!user) {
123 throw new Error(`User not found: ${userId}`);
124 }
125
126 // 6. Structured logging
127 const handlePress = useCallback(() => {
128 logger.info('User profile pressed', { userId });
129 onPress?.();
130 }, [userId, onPress]);
131
132 return (
133 <View style={styles.container}>
134 <Text style={styles.name}>{user.name}</Text>
135 </View>
136 );
137};
138
139// 7. No inline styles - use StyleSheet
140const styles = StyleSheet.create({
141 container: {
142 padding: 16,
143 },
144 name: {
145 fontSize: 18,
146 fontWeight: 'bold',
147 },
148});
149```
150
151## ⚠️ React Native Architecture Rules (AFTER Quality)
152
153### Choose Consistent State Management
154
155**Choose ONE state management solution per project:**
156
157**Option 1: Zustand (Recommended for Simple State)**
158- ✅ Minimal boilerplate, hooks-based
159- ✅ Perfect for app-level state (user, settings)
160- ✅ Easy to test, TypeScript-friendly
161
162**Option 2: Jotai (Recommended for Atomic State)**
163- ✅ Atomic state management
164- ✅ Perfect for complex derived state
165- ✅ Better for fine-grained reactivity
166
167**Universal Rules (Both Solutions):**
168- ✅ Use selectors to prevent unnecessary rerenders
169- ✅ Keep state normalized (no nested objects)
170- ✅ Persist state with async storage adapters
171- ✅ NEVER use Redux (too much boilerplate)
172
173### Choose ONE Navigation Solution
174
175**Option 1: Expo Router (Recommended)**
176- ✅ File-based routing (app/ directory)
177- ✅ Built-in TypeScript support
178- ✅ Automatic deep linking
179
180**Option 2: React Navigation 7**
181- ✅ More control over navigation structure
182- ✅ Better for complex navigation flows
183- ✅ Proven stability
184
185### ALWAYS Use FlatList for Lists
186
187**NEVER use ScrollView + map for lists:**
188
189```typescript
190// ❌ BAD: ScrollView + map (terrible performance)
191<ScrollView>
192 {items.map(item => <Item key={item.id} {...item} />)}
193</ScrollView>
194
195// ✅ GOOD: FlatList with proper optimization
196<FlatList
197 data={items}
198 renderItem={({ item }) => <Item {...item} />}
199 keyExtractor={(item) => item.id}
200 getItemLayout={(data, index) => ({
201 length: ITEM_HEIGHT,
202 offset: ITEM_HEIGHT * index,
203 index,
204 })}
205 removeClippedSubviews
206 maxToRenderPerBatch={10}
207 windowSize={11}
208/>
209```
210
211## Quick Examples: ❌ BAD vs ✅ GOOD
212
213### Example 1: Component Structure
214
215```typescript
216// ❌ BAD: Class component, inline styles, no types
217class UserCard extends React.Component {
218 render() {
219 return (
220 <View style={{ padding: 10 }}>
221 <Text>{this.props.name}</Text>
222 </View>
223 );
224 }
225}
226
227// ✅ GOOD: Functional component, typed props, StyleSheet
228interface UserCardProps {
229 name: string;
230 onPress?: () => void;
231}
232
233export const UserCard: React.FC<UserCardProps> = ({ name, onPress }) => {
234 return (
235 <View style={styles.container}>
236 <Text style={styles.name}>{name}</Text>
237 </View>
238 );
239};
240
241const styles = StyleSheet.create({
242 container: { padding: 10 },
243 name: { fontSize: 16 },
244});
245```
246
247### Example 2: State Management
248
249```typescript
250// ❌ BAD: useState for app-level state
251function App() {
252 const [user, setUser] = useState(null);
253 const [settings, setSettings] = useState({});
254
255 return <AppContent user={user} settings={settings} />;
256}
257
258// ✅ GOOD: Zustand for app-level state
259import { create } from 'zustand';
260
261interface AppState {
262 user: User | null;
263 settings: Settings;
264 setUser: (user: User | null) => void;
265}
266
267export const useAppStore = create<AppState>((set) => ({
268 user: null,
269 settings: {},
270 setUser: (user) => set({ user }),
271}));
272
273function App() {
274 const user = useAppStore((state) => state.user);
275 return <AppContent />;
276}
277```
278
279### Example 3: List Rendering
280
281```typescript
282// ❌ BAD: ScrollView + map
283<ScrollView>
284 {users.map(user => (
285 <UserCard key={user.id} user={user} />
286 ))}
287</ScrollView>
288
289// ✅ GOOD: FlatList with optimization
290const ITEM_HEIGHT = 80;
291
292<FlatList
293 data={users}
294 renderItem={({ item }) => <UserCard user={item} />}
295 keyExtractor={(item) => item.id}
296 getItemLayout={(_, index) => ({
297 length: ITEM_HEIGHT,
298 offset: ITEM_HEIGHT * index,
299 index,
300 })}
301/>
302```
303
304## Common Mistakes to Avoid
305
306### 🔴 Critical Mistakes
307
308| Mistake | Why It's Wrong | Correct Approach |
309|---------|----------------|------------------|
310| Using class components | Outdated, verbose, no hooks | Use functional components |
311| Using `any` type | Defeats TypeScript safety | Use proper types or `unknown` |
312| Inline styles in JSX | Poor performance, not reusable | Use `StyleSheet.create()` |
313| ScrollView + map for long lists | Memory issues, poor performance | Use `FlatList` with optimization |
314| Direct console.log | Not structured, no filtering | Use logger utility |
315
316### 🟡 Warning-Level Mistakes
317
318| Mistake | Why It's Wrong | Correct Approach |
319|---------|----------------|------------------|
320| Not using path aliases | Ugly relative imports | Configure @/ alias |
321| Missing keyExtractor | Poor list performance | Always provide keyExtractor |
322| Not memoizing callbacks | Causes unnecessary rerenders | Use `useCallback` |
323| Platform checks in render | Duplicated logic | Use Platform-specific files |
324| Not cleaning up effects | Memory leaks | Return cleanup function |
325
326### 🟢 Optimization Opportunities
327
328| Pattern | Issue | Optimization |
329|---------|-------|--------------|
330| Expensive calculations in render | Recalculates every render | Use `useMemo` |
331| Props causing child rerenders | Child rerenders unnecessarily | Use `React.memo` |
332| Large lists without optimization | Slow scrolling | Add `getItemLayout` |
333| Deep object comparisons | Expensive checks | Use shallow equality |
334| Large bundles | Slow app startup | Code splitting, lazy loading |
335
336## Code Review Checklist
337
338Use this checklist when reviewing React Native code:
339
340### 🔴 Critical Issues (Block Merge)
341
342- [ ] TypeScript strict mode enabled
343- [ ] No `any` types used
344- [ ] ESLint + Prettier passing
345- [ ] Path aliases (@/) configured and used
346- [ ] Errors are thrown (not suppressed)
347- [ ] Error boundaries wrap components
348- [ ] FlatList used for lists (not ScrollView + map)
349- [ ] File naming follows conventions (kebab-case)
350
351### 🟡 Important Issues (Request Changes)
352
353- [ ] Functional components used (no class components)
354- [ ] Props are properly typed
355- [ ] Hooks rules followed (no conditionals, no loops)
356- [ ] useCallback/useMemo used appropriately
357- [ ] Styles use StyleSheet (no inline styles)
358- [ ] State management is consistent (Zustand OR Jotai)
359- [ ] Navigation is consistent (Expo Router OR React Navigation)
360- [ ] Platform-specific code properly handled
361
362### 🟢 Suggestions (Non-Blocking)
363
364- [ ] Custom hooks extract reusable logic
365- [ ] React.memo used for expensive components
366- [ ] getItemLayout provided for FlatList
367- [ ] Effect cleanup functions provided
368- [ ] Code splitting for large screens
369- [ ] Images optimized and lazy loaded
370- [ ] Accessibility props added (accessibilityLabel)
371
372## Framework Versions
373
374**Recommended Stack:**
375- React Native: 0.74+ (latest stable)
376- Expo SDK: 51+ (if using Expo)
377- TypeScript: 5.4+
378- React: 18.2+
379- Zustand: 4.5+ OR Jotai: 2.8+
380- Expo Router: 3.5+ OR React Navigation: 7+
381
382**Development Tools:**
383- ESLint: 8.57+ with @react-native-community plugin
384- Prettier: 3.2+
385- Metro bundler (built-in)
386- React DevTools: Latest
387
388## Reference Files Structure
389
390All detailed patterns and examples are in reference files:
391
392### Language Patterns (TypeScript + React)
393- **[Quality & Hygiene](references/language/quality-hygiene.md)** - TypeScript strict, ESLint, path aliases, error handling
394- **[Modern React](references/language/modern-react.md)** - Hooks, functional components, memoization
395- **[TypeScript Patterns](references/language/typescript-patterns.md)** - Type-safe props, generics, utility types
396
397### Framework Patterns (React Native)
398- **[Component Patterns](references/framework/component-patterns.md)** - Functional components, composition, HOCs
399- **[State Management](references/framework/state-management.md)** - Zustand, Jotai, persistence
400- **[Navigation Patterns](references/framework/navigation-patterns.md)** - Expo Router, React Navigation, deep linking
401- **[Platform-Specific](references/framework/platform-specific.md)** - iOS/Android differences, platform files
402- **[Performance Patterns](references/framework/performance-patterns.md)** - FlatList optimization, rerender prevention
403
404### Code Review Guidelines
405- **[Architecture Review](references/review/architecture-review.md)** - Component violations, state issues
406- **[Quality Review](references/review/quality-review.md)** - TypeScript quality, hooks violations
407- **[Performance Review](references/review/performance-review.md)** - List optimization, memory leaks