2.5 KiB
2.5 KiB
Development Standards & Guidelines
Naming Conventions
- Files: PascalCase for components, camelCase for utilities
- Components: PascalCase (e.g.,
UserProfile.tsx
) - Variables: camelCase (e.g.,
userName
) - Constants: UPPER_SNAKE_CASE (e.g.,
API_BASE_URL
) - Types/Interfaces: PascalCase with descriptive names
Component Architecture
Base Component Structure:
// src/components/common/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" | "outline";
disabled?: boolean;
style?: ViewStyle;
textStyle?: TextStyle;
}
export const Button: React.FC<ButtonProps> = ({
title,
onPress,
variant = "primary",
disabled = false,
style,
textStyle,
}) => {
return (
<TouchableOpacity
style={[
styles.button,
styles[variant],
disabled && styles.disabled,
style,
]}
onPress={onPress}
disabled={disabled}
activeOpacity={0.7}
>
<Text style={[styles.text, styles[`${variant}Text`], textStyle]}>
{title}
</Text>
</TouchableOpacity>
);
};
const styles = StyleSheet.create({
button: {
paddingHorizontal: 20,
paddingVertical: 12,
borderRadius: 8,
alignItems: "center",
justifyContent: "center",
},
primary: {
backgroundColor: "#007AFF",
},
secondary: {
backgroundColor: "#6C757D",
},
outline: {
backgroundColor: "transparent",
borderWidth: 1,
borderColor: "#007AFF",
},
disabled: {
opacity: 0.5,
},
text: {
fontSize: 16,
fontWeight: "600",
},
primaryText: {
color: "#FFFFFF",
},
secondaryText: {
color: "#FFFFFF",
},
outlineText: {
color: "#007AFF",
},
});
Code Style Guidelines
TypeScript Best Practices
- Always use strict mode
- Define interfaces for all props
- Use proper type annotations
- Avoid
any
type - Use union types for variants
React Native Specific
- Use StyleSheet.create() for styles
- Avoid inline styles when possible
- Use proper component lifecycle methods
- Implement proper error boundaries
- Use React.memo for performance optimization
File Organization
- One component per file
- Index files for clean imports
- Separate styles in same file
- Group related components in folders