الفرق بين المراجعتين لصفحة: «ReactNative/navigation»

من موسوعة حسوب
لا ملخص تعديل
طلا ملخص تعديل
 
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:التنقل بين الشاشات في React Native}}</noinclude>
<noinclude>{{DISPLAYTITLE:التنقل بين الشاشات في React Native}}</noinclude>
تتكون تطبيقات الجوّال نادرًا من شاشة واحدة فقط، حيث يدير ما يُعرَف بالمتنقّل navigator عرض شاشاتٍ متعدّدة ويحوّل بينها.
تتكون تطبيقات الهاتف المحمول نادرًا من شاشة واحدة فقط، إذ يدير ما يُعرَف بالمتنقّل navigator عرض شاشاتٍ متعدّدة ويحوّل بينها.


يغطّي هذا الدليل مكونات التنقّل المتوفرة في React Native. إذا كان مفهوم التنقّل جديدًا عليك، فيُفضَّل أن تستخدم مكتبة React Navigation التي توفّر حلًّا سهل الاستخدام للتنقّل بين الشاشات، مع القدرة على استخدام نمطَي التنقل المُكدَّس stack navigation والتنقل المبوَّب tabbed navigation الشائعين على كل من نظامي التشغيل iOS و Android.
يغطّي هذا الدليل مكونات التنقّل المتوفرة في React Native. إذا كان مفهوم التنقّل جديدًا عليك، فيُفضَّل أن تستخدم مكتبة React Navigation التي توفّر حلًا سهل الاستخدام للتنقّل بين الشاشات، مع القدرة على استخدام نمطَي التنقل المُكدَّس stack navigation والتنقل المبوَّب tabbed navigation الشائعين على كل من نظامي التشغيل iOS و Android.


إذا أردت مظهرًا وإحساسًا أصيلًا على كل من نظامي التشغيل iOS و Android، أو إذا كنت بصدد دمج React Native مع تطبيق أصيل يدير التنقّل بالفعل، فمكتبة [https://github.com/wix/react-native-navigation react-native-navigation] توفر تنقّلًا أصيلًا على كلِّ من النظامين.
إذا أردت مظهرًا وإحساسًا أصيلًا على كل من نظامي التشغيل iOS و Android، أو إذا كنت بصدد دمج React Native مع تطبيق أصيل يدير التنقّل بالفعل، فمكتبة [https://github.com/wix/react-native-navigation react-native-navigation] توفر لك تنقّلًا أصيلًا على كلٍ من النظامين.


==مكتبة React Navigation==
==مكتبة React Navigation==
سطر 12: سطر 12:
يجب أولًا تثبيت هذه المكتبة في مشروعك:
يجب أولًا تثبيت هذه المكتبة في مشروعك:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
npm install @react-navigation/native @react-navigation/stack
npm install @react-navigation/native @react-navigation/native-stack
</syntaxhighlight>
</syntaxhighlight>
ثم ثبّت اعتماديات الأنداد المطلوبة. تحتاج إلى تشغيل أوامر مختلفة اعتمادًا على ما إذا كان مشروعك عبارة عن مشروع يديره Expo أو مشروع React Native صِرف.
ثم ثبّت اعتماديات الأنداد peer dependencies المطلوبة. تحتاج إلى تشغيل أوامر مختلفة اعتمادًا على ما إذا كان مشروعك عبارة عن مشروع يديره Expo أو مشروع React Native صِرف.


إذا كان لديك مشروع يديره Expo، فثبّت الاعتماديات باستخدام الأمر <code>expo</code>:<syntaxhighlight lang="bash">
إذا كان لديك مشروع يديره Expo، فثبّت الاعتماديات باستخدام أمر <code>expo</code> التالي:<syntaxhighlight lang="bash">
expo install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
expo install react-native-screens react-native-safe-area-context
</syntaxhighlight>إذا كان لديك مشروع React Native صِرف، فثبّت الاعتماديات باستخدام الأمر <code>npm</code>:<syntaxhighlight lang="bash">
</syntaxhighlight>إذا كان لديك مشروع React Native صِرف، فثبّت الاعتماديات باستخدام أمر <code>npm</code> التالي:<syntaxhighlight lang="bash">
npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
npm install react-native-screens react-native-safe-area-context
</syntaxhighlight>تأكّد من تثبيت [https://cocoapods.org/ Cocoapods] بالنسبة لنظام iOS مع مشروع React Native الصِرف، ثم ثبّت ملفات pod لإكمال التثبيت:<syntaxhighlight lang="bash">
</syntaxhighlight>تأكّد من تثبيت [https://cocoapods.org/ Cocoapods] بالنسبة لنظام iOS مع مشروع React Native الصِرف، ثم ثبّت ملفات pod لإكمال التثبيت:<syntaxhighlight lang="bash">
cd ios
cd ios
pod install
pod install
cd ..
cd ..
</syntaxhighlight>'''ملاحظة''': قد تتلقّى تحذيرات تتعلّق باعتماديات الأنداد بعد التثبيت، التي تكون عادةً ناتجة عن نطاقات إصدارات غير صحيحة محدَّدة في بعض الحزم. يمكنك تجاهل معظم التحذيرات بأمان طالما أنك يُبنى تطبيقك.
</syntaxhighlight><blockquote>'''ملاحظة''': قد تتلقّى تحذيرات تتعلّق باعتماديات الأنداد بعد التثبيت، التي تكون عادةً ناتجة عن نطاقات إصدارات غير صحيحة محدَّدة في بعض الحزم. يمكنك تجاهل معظم التحذيرات بأمان طالما أن تطبيقك يعمل بنجاح.</blockquote>أضِف السطر التالي في الجزء العلوي (تأكد من أنه في الجزء العلوي ولا يوجد شيء آخر قبله) من ملف الإدخال مثل الملف <code>index.js</code> أو <code>App.js</code> لإنهاء تثبيت معالج الإيماءات <code>react-native-gesture-handler</code>:<syntaxhighlight lang="javascript">
 
أضِف السطر التالي في الجزء العلوي (تأكد من أنه في الجزء العلوي ولا يوجد شيء آخر قبله) من ملف الإدخال مثل الملف <code>index.js</code> أو <code>App.js</code> لإنهاء تثبيت معالج الإيماءات <code>react-native-gesture-handler</code>:<syntaxhighlight lang="javascript">
import 'react-native-gesture-handler';
import 'react-native-gesture-handler';
</syntaxhighlight>يجب الآن تغليف التطبيق بأكمله في <code>NavigationContainer</code>،  حيث تطبّق ذلك في ملف الإدخال الخاص بك مثل الملف <code>index.js</code> أو <code>App.js</code>:<syntaxhighlight lang="javascript">
</syntaxhighlight>يجب الآن تغليف التطبيق بأكمله في <code>NavigationContainer</code>،  حيث تطبّق ذلك في ملف الإدخال الخاص بك مثل الملف <code>index.js</code> أو <code>App.js</code>:<syntaxhighlight lang="javascript">
سطر 49: سطر 47:
import * as React from 'react';
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { createNativeStackNavigator } from '@react-navigation/native-stack';


const Stack = createStackNavigator();
const Stack = createNativeStackNavigator();


const MyStack = () => {
const MyStack = () => {
سطر 72: سطر 70:
يمكنك ضبط خيارات مثل عنوان كل شاشة في الخاصية <code>options</code> التابعة للمكوّن <code>Stack.Screen</code>.
يمكنك ضبط خيارات مثل عنوان كل شاشة في الخاصية <code>options</code> التابعة للمكوّن <code>Stack.Screen</code>.


تأخذ كل شاشة خاصية مكوّن <code>component</code> والتي هي أيضًا من مكونات React. تتلقّى هذه المكونات خاصية تسمى التنقل <code>navigation</code> التي لها توابع مختلفة للربط بشاشات أخرى، حيث يمكنك استخدام التابع <code>navigation.navigate</code> مثلًا للذهاب إلى الشاشة <code>Profile</code>:<syntaxhighlight lang="javascript">
تأخذ كل شاشة خاصية مكوّن <code>component</code> وهي أيضًا من مكونات React. تتلقّى هذه المكونات خاصية تسمى التنقل <code>navigation</code> التي لها توابع مختلفة للربط بشاشات أخرى، إذ يمكنك استخدام التابع <code>navigation.navigate</code> مثلًا للذهاب إلى الشاشة <code>Profile</code>:<syntaxhighlight lang="javascript">
const HomeScreen = ({ navigation }) => {
const HomeScreen = ({ navigation }) => {
   return (
   return (
سطر 86: سطر 84:
   return <Text>This is {route.params.name}'s profile</Text>;
   return <Text>This is {route.params.name}'s profile</Text>;
};
};
</syntaxhighlight>تستخدم العروضُ views في المتنقّل المُكدَّس stack navigator المكونات الأصيلة مع مكتبة التحريك [[ReactNative/animated|‎<code>Animated</code>‎]] لتقديم تحريكاتٍ بمعدّل 60 إطارًا في الثانية (60fps) تُشغَّل على الخيط الأصيل native thread، بالإضافة إلى إمكانيّة تخصيص التحريكات والإيماءات.
</syntaxhighlight>يستخدم المُتنقِّل <code>native-stack</code> الواجهة البرمجية الأصيلة <code>UINavigationController</code> على نظام iOS والواجهة البرمجية الأصيلة <code>Fragment</code> على نظام Android لذا سيسلك المنتقل المبني مع <code>createNativeStackNavigator</code> السلوك النفسه ويملك سمات الأداء نفسه الذي يكون لدى تطبيق أصيل مبني باستعمال هاتين الواجهتين.  


تحتوي المكتبة React Navigation أيضًا على حزم لأنواع مختلفة من المتنقّلات navigators مثل التبويبات tabs والسحب drawer، التي يمكنك استخدامها لتطبيق أنماط مختلفة في تطبيقك.
تحتوي المكتبة React Navigation أيضًا على حزم لأنواع مختلفة من المتنقّلات navigators مثل التبويبات tabs والسحب drawer، التي يمكنك استخدامها لتطبيق أنماط مختلفة في تطبيقك.


اتبع [https://reactnavigation.org/docs/getting-started/ دليل بدء استخدام React Navigation]، للاطّلاع على مقدمة كاملة عنها.
اتبع [https://reactnavigation.org/docs/getting-started/ دليل بدء استخدام مكتبة React Navigation] الأجنبي للاطّلاع على مقدمة كاملة عنها.


== مصادر ==
== مصادر ==
* [https://reactnative.dev/docs/navigation صفحة Navigating Between Screens في توثيق React Native الرسمي.]
* [https://reactnative.dev/docs/navigation صفحة Navigating Between Screens في توثيق React Native الرسمي.]
[[تصنيف:ReactNative]]
[[تصنيف:ReactNative]]
[[تصنيف:React Native Docs]]

المراجعة الحالية بتاريخ 13:43، 9 أكتوبر 2021

تتكون تطبيقات الهاتف المحمول نادرًا من شاشة واحدة فقط، إذ يدير ما يُعرَف بالمتنقّل navigator عرض شاشاتٍ متعدّدة ويحوّل بينها.

يغطّي هذا الدليل مكونات التنقّل المتوفرة في React Native. إذا كان مفهوم التنقّل جديدًا عليك، فيُفضَّل أن تستخدم مكتبة React Navigation التي توفّر حلًا سهل الاستخدام للتنقّل بين الشاشات، مع القدرة على استخدام نمطَي التنقل المُكدَّس stack navigation والتنقل المبوَّب tabbed navigation الشائعين على كل من نظامي التشغيل iOS و Android.

إذا أردت مظهرًا وإحساسًا أصيلًا على كل من نظامي التشغيل iOS و Android، أو إذا كنت بصدد دمج React Native مع تطبيق أصيل يدير التنقّل بالفعل، فمكتبة react-native-navigation توفر لك تنقّلًا أصيلًا على كلٍ من النظامين.

مكتبة React Navigation

الحل الذي يتبنّاه مجتمع المطورين هو مكتبةٌ قائمة بذاتها تسمح للمطورين بإعداد شاشات التطبيق باستخدام بضعة أسطر من الشيفرة.

التثبيت والإعداد

يجب أولًا تثبيت هذه المكتبة في مشروعك:

npm install @react-navigation/native @react-navigation/native-stack

ثم ثبّت اعتماديات الأنداد peer dependencies المطلوبة. تحتاج إلى تشغيل أوامر مختلفة اعتمادًا على ما إذا كان مشروعك عبارة عن مشروع يديره Expo أو مشروع React Native صِرف.

إذا كان لديك مشروع يديره Expo، فثبّت الاعتماديات باستخدام أمر expo التالي:

expo install react-native-screens react-native-safe-area-context

إذا كان لديك مشروع React Native صِرف، فثبّت الاعتماديات باستخدام أمر npm التالي:

npm install react-native-screens react-native-safe-area-context

تأكّد من تثبيت Cocoapods بالنسبة لنظام iOS مع مشروع React Native الصِرف، ثم ثبّت ملفات pod لإكمال التثبيت:

cd ios
pod install
cd ..

ملاحظة: قد تتلقّى تحذيرات تتعلّق باعتماديات الأنداد بعد التثبيت، التي تكون عادةً ناتجة عن نطاقات إصدارات غير صحيحة محدَّدة في بعض الحزم. يمكنك تجاهل معظم التحذيرات بأمان طالما أن تطبيقك يعمل بنجاح.

أضِف السطر التالي في الجزء العلوي (تأكد من أنه في الجزء العلوي ولا يوجد شيء آخر قبله) من ملف الإدخال مثل الملف index.js أو App.js لإنهاء تثبيت معالج الإيماءات react-native-gesture-handler:

import 'react-native-gesture-handler';

يجب الآن تغليف التطبيق بأكمله في NavigationContainer، حيث تطبّق ذلك في ملف الإدخال الخاص بك مثل الملف index.js أو App.js:

import 'react-native-gesture-handler';
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';

const App = () => {
  return (
    <NavigationContainer>
      {/* بقية شيفرة تطبيقك */}
    </NavigationContainer>
  );
};

export default App;

يمكنك الآن بناء وتشغيل تطبيقك على محاكٍ أو على جهاز فعلي.

الاستخدام

يمكنك بعد ذلك إنشاء تطبيقٍ يتألف من شاشة رئيسية home وشاشة ملف تعريفي profile كالتالي:

import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';

const Stack = createNativeStackNavigator();

const MyStack = () => {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen
          name="Home"
          component={HomeScreen}
          options={{ title: 'Welcome' }}
        />
        <Stack.Screen name="Profile" component={ProfileScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
};

هناك شاشتان في هذا المثال (الصفحة الرئيسية Home والملف التعريفي Profile) جرى تعريفهما باستخدام المكوّن Stack.Screen، وهكذا يمكنك تعريف أي عدد تريده من الشاشات.

يمكنك ضبط خيارات مثل عنوان كل شاشة في الخاصية options التابعة للمكوّن Stack.Screen.

تأخذ كل شاشة خاصية مكوّن component وهي أيضًا من مكونات React. تتلقّى هذه المكونات خاصية تسمى التنقل navigation التي لها توابع مختلفة للربط بشاشات أخرى، إذ يمكنك استخدام التابع navigation.navigate مثلًا للذهاب إلى الشاشة Profile:

const HomeScreen = ({ navigation }) => {
  return (
    <Button
      title="Go to Jane's profile"
      onPress={() =>
        navigation.navigate('Profile', { name: 'Jane' })
      }
    />
  );
};
const ProfileScreen = ({ navigation, route }) => {
  return <Text>This is {route.params.name}'s profile</Text>;
};

يستخدم المُتنقِّل native-stack الواجهة البرمجية الأصيلة UINavigationController على نظام iOS والواجهة البرمجية الأصيلة Fragment على نظام Android لذا سيسلك المنتقل المبني مع createNativeStackNavigator السلوك النفسه ويملك سمات الأداء نفسه الذي يكون لدى تطبيق أصيل مبني باستعمال هاتين الواجهتين.

تحتوي المكتبة React Navigation أيضًا على حزم لأنواع مختلفة من المتنقّلات navigators مثل التبويبات tabs والسحب drawer، التي يمكنك استخدامها لتطبيق أنماط مختلفة في تطبيقك.

اتبع دليل بدء استخدام مكتبة React Navigation الأجنبي للاطّلاع على مقدمة كاملة عنها.

مصادر