مطور التطبيقات متعددة المنصات باستخدام React Native يركز على إنشاء تطبيقات تعمل على Android و iOS باستخدام JavaScript و React وكود واحد، مع الاستفادة من أدوات مثل Expo و Firebase.
متعددة المنصات
تطبيقات تعمل على Android و iOS
JavaScript
كود واحد لكل المنصات
Expo
تطوير أسرع وأسهل
Firebase
خدمات الخلفية المتكاملة
اللغات والأدوات المستخدمة
JavaScript
اللغة الأساسية لكتابة شفرات React Native
TypeScript
إضافة أنواع البيانات وتحسين جودة الكود
React
مكتبة JavaScript لبناء واجهات المستخدم
GraphQL
استعلامات بيانات فعالة أفضل من REST
Firebase
منصة شاملة توفر خدمات الخلفية
Expo
مجموعة أدوات لتسهيل التطوير
مهارات مطور React Native
1
JavaScript/TypeScript
إتقان أساسيات البرمجة الحديثة
2
React Concepts
مكونات، حالة، خصائص، وخطافات
3
React Native
مكونات وأدوات المنصة
4
التنقل بين الشاشات
React Navigation للملاحة
5
إدارة الحالة
Redux، Context API، MobX
6
خدمات الخلفية
Firebase، APIs، GraphQL
خارطة التعلم خطوة بخطوة
1
الخطوة 1: تعلم JavaScript
JavaScript هي اللغة الأساسية لكتابة شيفرات React Native
الأهمية:
الأساس لفهم كيفية بناء التطبيقات باستخدام البرمجة الوظيفية والتفاعلية
الأدوات:
أي محرر نصوص مثل VS Code
مثال JavaScript أساسي:
// أساسيات JavaScript
console.log("مرحبا بالعالم!");
// المتغيرات والثوابت
let name = "مطور React Native";
const age = 25;
var city = "الرياض";
// الدوال (Functions)
function greet(user) {
return `مرحباً ${user}!`;
}
// الدوال السهمية (Arrow Functions)
const add = (a, b) => a + b;
// المصفوفات (Arrays)
const colors = ["أحمر", "أخضر", "أزرق"];
colors.map(color => console.log(color));
// الكائنات (Objects)
const user = {
name: "أحمد",
age: 30,
email: "ahmed@example.com"
};
// التدمير (Destructuring)
const { name, age } = user;
// Promises و Async/Await
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error('حدث خطأ:', error);
}
}
2
الخطوة 2: تعلم React Native
React Native هو إطار عمل مفتوح المصدر لتطوير التطبيقات عبر الأنظمة باستخدام JavaScript
الأهمية:
الأساس لفهم كيفية بناء تطبيقات تعمل على Android و iOS مع كود واحد
Expo هو مجموعة أدوات تجعل تطوير تطبيقات React Native أسهل وأسرع
الأهمية:
الأساس لفهم كيفية بناء التطبيقات دون الحاجة إلى إعداد بنية Android/iOS
الأدوات:
Expo CLI
مثال إنشاء مشروع Expo:
// إنشاء مشروع Expo جديد
// في الطرفية (Terminal)، قم بتشغيل الأوامر التالية:
// 1. إنشاء مشروع جديد
npx create-expo-app my-react-native-app
// 2. الانتقال إلى مجلد المشروع
cd my-react-native-app
// 3. تشغيل المشروع
npx expo start
// سيفتح Expo DevTools في المتصفح
// يمكنك فحص التطبيق على:
// - Android: Expo Go App على الهاتف
// - iOS: Expo Go App على iPhone
// - ويب: المتصفح
// - محاكي: Android Studio أو Xcode
// 4. تثبيت حزم إضافية
npx expo install react-native-safe-area-context
npx expo install react-native-screens
npx expo install react-native-gesture-handler
// 5. بناء التطبيق للانتاج
// للـ Android:
eas build -p android --profile preview
// للـ iOS:
eas build -p ios --profile preview
// 6. نشر التطبيق على متجر التطبيقات
// أ) تسجيل الدخول إلى Expo
eas login
// ب) تهيئة المشروع للبناء
eas build:configure
// ج) بناء وإرسال إلى المتجر
eas submit -p android --latest
eas submit -p ios --latest
// ملف app.json للتكوين
{
"expo": {
"name": "تطبيقي React Native",
"slug": "my-react-native-app",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": [
"**/*"
],
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.yourcompany.yourapp"
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#FFFFFF"
},
"package": "com.yourcompany.yourapp"
},
"web": {
"favicon": "./assets/favicon.png"
},
"plugins": [
"expo-font",
"expo-asset"
]
}
}
4
الخطوة 4: تعلم React Navigation
React Navigation هي مكتبة لإنشاء التنقل بين الشاشات في تطبيقات React Native
الأهمية:
الأساس لفهم كيفية تنقل المستخدم بين شاشات التطبيق
الأدوات:
React Navigation، Stack Navigator، Tab Navigator
مثال React Navigation:
// App.js مع React Navigation
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { Ionicons } from '@expo/vector-icons';
// الشاشات
import HomeScreen from './screens/HomeScreen';
import ProfileScreen from './screens/ProfileScreen';
import SettingsScreen from './screens/SettingsScreen';
import DetailsScreen from './screens/DetailsScreen';
// إنشاء الملاحات
const Stack = createNativeStackNavigator();
const Tab = createBottomTabNavigator();
// تبويب الملاحة الرئيسي
function MainTabNavigator() {
return (
({
tabBarIcon: ({ focused, color, size }) => {
let iconName;
if (route.name === 'الرئيسية') {
iconName = focused ? 'home' : 'home-outline';
} else if (route.name === 'الملف الشخصي') {
iconName = focused ? 'person' : 'person-outline';
} else if (route.name === 'الإعدادات') {
iconName = focused ? 'settings' : 'settings-outline';
}
return ;
},
tabBarActiveTintColor: '#007AFF',
tabBarInactiveTintColor: 'gray',
tabBarStyle: {
backgroundColor: 'white',
borderTopWidth: 1,
borderTopColor: '#f0f0f0',
},
headerShown: false,
})}
>
);
}
// التطبيق الرئيسي
export default function App() {
return (
);
}
// HomeScreen.js
import React from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
export default function HomeScreen({ navigation }) {
return (
الشاشة الرئيسية
);
}
// DetailsScreen.js
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
export default function DetailsScreen({ route, navigation }) {
const { itemId } = route.params || {};
return (
شاشة التفاصيل
{itemId && معرف العنصر: {itemId}}
navigation.goBack()}
/>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
},
title: {
fontSize: 24,
fontWeight: 'bold',
marginBottom: 20,
},
});
5
الخطوة 5: تعلم Firebase
Firebase هي منصة شاملة توفر خدمات مثل التخزين السحابي، التوثيق والإشعارات
الأهمية:
الأساس لفهم كيفية إضافة ميزات خلفية إلى التطبيق دون الحاجة إلى بناء خادم مخصص
الأدوات:
Firebase Console
مثال Firebase Authentication:
// 1. تثبيت حزم Firebase
// npm install @react-native-firebase/app
// npm install @react-native-firebase/auth
// npm install @react-native-firebase/firestore
// npm install @react-native-firebase/storage
// 2. تهيئة Firebase في المشروع
// android/app/google-services.json
// ios/GoogleService-Info.plist
// 3. App.js مع Firebase
import React, { useState, useEffect } from 'react';
import { View, Text, TextInput, Button, Alert } from 'react-native';
import auth from '@react-native-firebase/auth';
import firestore from '@react-native-firebase/firestore';
export default function LoginScreen() {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(false);
// مراقبة حالة المصادقة
useEffect(() => {
const subscriber = auth().onAuthStateChanged(setUser);
return subscriber; // إلغاء الاشتراك عند التنظيف
}, []);
// تسجيل الدخول باستخدام البريد الإلكتروني وكلمة المرور
const handleLogin = async () => {
if (!email || !password) {
Alert.alert('خطأ', 'يرجى إدخال البريد الإلكتروني وكلمة المرور');
return;
}
setLoading(true);
try {
const userCredential = await auth().signInWithEmailAndPassword(email, password);
console.log('تم تسجيل الدخول بنجاح:', userCredential.user.email);
// جلب بيانات المستخدم من Firestore
const userDoc = await firestore()
.collection('users')
.doc(userCredential.user.uid)
.get();
if (userDoc.exists) {
console.log('بيانات المستخدم:', userDoc.data());
}
} catch (error) {
console.error('خطأ في تسجيل الدخول:', error);
Alert.alert('خطأ', error.message);
} finally {
setLoading(false);
}
};
// إنشاء حساب جديد
const handleSignUp = async () => {
if (!email || !password) {
Alert.alert('خطأ', 'يرجى إدخال البريد الإلكتروني وكلمة المرور');
return;
}
setLoading(true);
try {
const userCredential = await auth().createUserWithEmailAndPassword(email, password);
console.log('تم إنشاء الحساب بنجاح:', userCredential.user.uid);
// حفظ بيانات إضافية في Firestore
await firestore()
.collection('users')
.doc(userCredential.user.uid)
.set({
email: userCredential.user.email,
createdAt: firestore.FieldValue.serverTimestamp(),
displayName: '',
photoURL: '',
});
Alert.alert('نجاح', 'تم إنشاء الحساب بنجاح');
} catch (error) {
console.error('خطأ في إنشاء الحساب:', error);
Alert.alert('خطأ', error.message);
} finally {
setLoading(false);
}
};
// تسجيل الخروج
const handleLogout = async () => {
try {
await auth().signOut();
Alert.alert('تم', 'تم تسجيل الخروج بنجاح');
} catch (error) {
console.error('خطأ في تسجيل الخروج:', error);
}
};
// إذا كان المستخدم مسجل الدخول
if (user) {
return (
مرحباً {user.email}!
تم تسجيل دخولك بنجاح
);
}
// شاشة تسجيل الدخول
return (
تسجيل الدخول
);
}
6
الخطوة 6: تعلم GraphQL
GraphQL لاستعلامات بيانات فعالة أفضل من REST API
الأهمية:
استعلامات بيانات فعالة أفضل من REST
الأدوات:
Apollo Client، Apollo Server
مثال GraphQL مع Apollo Client:
// 1. تثبيت حزم Apollo
// npm install @apollo/client graphql
// 2. ApolloClient.js
import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';
import { setContext } from '@apollo/client/link/context';
// رابط HTTP
const httpLink = createHttpLink({
uri: 'https://your-graphql-endpoint.com/graphql',
});
// إعداد السياق للرأس (للتوثيق)
const authLink = setContext((_, { headers }) => {
// احصل على رمز المصادقة من التخزين المحلي
const token = localStorage.getItem('token');
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : "",
}
};
});
// إنشاء عميل Apollo
const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache(),
defaultOptions: {
watchQuery: {
fetchPolicy: 'cache-and-network',
},
query: {
fetchPolicy: 'network-only',
errorPolicy: 'all',
},
mutate: {
errorPolicy: 'all',
},
},
});
export default client;
// 3. App.js مع Apollo Provider
import React from 'react';
import { ApolloProvider } from '@apollo/client';
import { useQuery, useMutation, gql } from '@apollo/client';
import client from './ApolloClient';
// استعلام GraphQL للحصول على المستخدمين
const GET_USERS = gql`
query GetUsers {
users {
id
name
email
posts {
id
title
content
}
}
}
`;
// طفرة GraphQL لإنشاء مستخدم جديد
const CREATE_USER = gql`
mutation CreateUser($name: String!, $email: String!, $password: String!) {
createUser(input: { name: $name, email: $email, password: $password }) {
id
name
email
}
}
`;
// مكون لجلب المستخدمين
function UsersList() {
const { loading, error, data, refetch } = useQuery(GET_USERS);
if (loading) return جاري التحميل...;
if (error) return حدث خطأ: {error.message};
return (
قائمة المستخدمين
refetch()} />
{data.users.map(user => (
{user.name}
{user.email}
{user.posts && user.posts.length > 0 && (
مقالات:
{user.posts.map(post => (
{post.title}{post.content}
))}
)}
))}
);
}
// مكون لإنشاء مستخدم جديد
function CreateUserForm() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [createUser, { loading, error }] = useMutation(CREATE_USER, {
onCompleted: () => {
Alert.alert('نجاح', 'تم إنشاء المستخدم بنجاح');
setName('');
setEmail('');
setPassword('');
},
refetchQueries: [{ query: GET_USERS }], // إعادة جلب المستخدمين بعد الإنشاء
});
const handleSubmit = () => {
if (!name || !email || !password) {
Alert.alert('خطأ', 'يرجى ملء جميع الحقول');
return;
}
createUser({
variables: { name, email, password },
});
};
return (
إنشاء مستخدم جديد
{error && (
حدث خطأ: {error.message}
)}
);
}
// التطبيق الرئيسي
function App() {
return (
);
}
export default App;
هندسة تطبيقات React Native
مكونات JavaScript
React Components، JSX، Logic
React Native Bridge
نقل البيانات بين JavaScript و Native
Native Modules
Android Views، iOS UIViewControllers
أدوات تطوير React Native
Expo
منصة تطوير متكاملة لـ React Native
سريعسهلمتكامل
React Native CLI
أدوات سطر الأوامر للتطوير المتقدم
متقدممرنمخصص
React Native Debugger
أداة تصحيح متكاملة للتطوير
تصحيحتحليلمراقبة
المزايا والتحديات
المزايا
طلب عالي: هناك طلب كبير على مطوري التطبيقات متعددة المنصات خاصة في الشركات الناشئة والشركات الصغيرة
أدوات مجانية: معظم الأدوات المستخدمة مثل Expo و Firebase مجانية أو تقدم خطط مجانية
تأثير إيجابي: يمكنك المساهمة في تحسين تجربة المستخدم عبر الإنترنت
إبداع لا محدود: يمكنك تصميم تطبيقات مبتكرة تعمل على Android و iOS مع كود واحد
وقت تطوير أقل: كود واحد لكل المنصات يوفر الوقت والجهد
التحديات
منحنى التعلم الحاد: يتطلب فهماً جيداً للغات البرمجة، التصميم وأساسيات React Native
تعقيد الأنظمة: قد تواجه تحديات في إدارة التطبيقات الكبيرة أو المعقدة
تحديثات متكررة: الأدوات والمعايير تتطور باستمرار، مما يتطلب تحديث المعرفة بشكل منتظم
أداء: قد يكون الأداء أقل من التطبيقات الأصلية في بعض الحالات
أنواع مشاريع React Native
تطبيقات التجارة الإلكترونية
متاجر إلكترونية كاملة الميزات
متاجردفعمخزن
تطبيقات الوسائط
أخبار، مدونات، ومحتوى تفاعلي
أخبارمحتوىتفاعل
تطبيقات التواصل
دردشة، اجتماعات، ووسائل تواصل
دردشةاجتماعاتتواصل
الخلاصة
React Native يوفر حلاً رائعاً لتطوير تطبيقات تعمل على منصتي Android و iOS باستخدام كود JavaScript واحد. من خلال إتقان JavaScript، React، وأدوات مثل Expo و Firebase، يمكنك بناء تطبيقات احترافية متعددة المنصات.