كيفية إنشاء تطبيق أخبار باستخدام React Native

بالنسبة إلى أول منشور لي على Medium ، وأردت أن أشارككم كيف أنشأت تطبيقًا إخباريًا باستخدام React Native.
نشرت أصلا على مدونتي.
متطلبات بناء التطبيق:
- فهم أساسي لـ JavaScriptاللغة .
- التثبيت: Node.js ، تفاعل مع npm.
- المكتبات المستخدمة: لحظة ، تفاعل أصلي ، عناصر تفاعل أصلية.
إذا لم تكن معتادًا على هذه الموارد ، فلا داعي للقلق - فهي سهلة الاستخدام للغاية.
الموضوعات التي سنغطيها في المنشور هي:
- واجهة برمجة تطبيقات الأخبار
- جلب API
- قائمة مسطحة
- للتحديث اسحب للأسفل
- ربط
والمزيد ... لذلك لنبدأ!
يمكنك العثور على مشروع إعادة الشراء هناواجهة برمجة تطبيقات الأخبار
واجهة برمجة تطبيقات بسيطة وسهلة الاستخدام تقوم بإرجاع بيانات تعريف JSON للعناوين الرئيسية والمقالات مباشرة عبر الويب في الوقت الحالي. - NewsAPI.orgأولاً ، يجب عليك المضي قدمًا والاشتراك في News Api للحصول على apiKey
( مفتاح المصادقة الخاص بك ) مجانًا.
قم بإنشاء مشروع React Native جديد ، وقم بتسميته news_app
(أو ما تريد). في دليل المشروع ، أنشئ مجلدًا جديدًا واتصل به src
. في src
الدليل ، قم بإنشاء مجلد باسمه components
. لذلك يجب أن يبدو دليل مشروعك كما يلي:

في src
المجلد ، قم بإنشاء ملف جديد يسمى news.js
. سنقوم في هذا الملف بإحضار JSON الذي يحتوي على العناوين الرئيسية من News API.
news.js
تأكد من استبدال YOUR_API_KEY_HERE بمفتاح API الخاص بك. لمزيد من المعلومات حول News API ، انتقل إلىمستندات newsapi .
نعلن الآن عن getNews
الوظيفة ، التي ستجلب لنا المقالات. قم بتصدير الوظيفة حتى نتمكن من استخدامها في App.js
ملفنا.
App.js
في الباني ، نحدد الحالة الأولية. articles
سيخزن مقالاتنا بعد جلبها ، refreshing
وسوف يساعدنا في تحديث الرسوم المتحركة.لاحظ أنني قمت بضبط refreshing
منطقي على صحيح ، لأننا عندما نبدأ التطبيق ، نريد أن تبدأ الرسوم المتحركة أثناء تحميل المقالات (عناوين الأخبار).
componentDidMount
يتم استدعاؤه فورًا بعد تركيب أحد المكونات. بداخلها نسمي fetchNews
الطريقة.
componentDidMount() { this.fetchNews();}
في fetchNews
نسميه getNews()
الذي يعود الوعد. لذلك نستخدم .then()
الطريقة التي تأخذ وظيفة رد الاتصال ، وتأخذ وظيفة رد الاتصال وسيطة ( المقالات ).
الآن قم بتعيين المقالات الموجودة في الولاية إلى وسيطة المقالات. لقد كتبت فقط articles
لأنها بناء جملة ES6 جديد مما يعني { articles: articles }
، وضبطنا refreshing
على خطأ لإيقاف الرسوم المتحركة الدوار.
fetchNews() { getNews().then( articles => this.setState({ articles, refreshing: false }) ).catch(() => this.setState({ refreshing: false }));}
.catch()
يسمى في الحالات المرفوضة.
handleRefresh
ستبدأ الطريقة في تحريك الرسوم المتحركة واستدعاء fetchNews()
الطريقة. نجتاز () => this.fetchNew
s () ، لذلك يتم استدعاؤها فورًا بعد تعيين الحالة.
handleRefresh() { this.setState({ refreshing: true },() => this.fetchNews());}
داخل عملية التصيير ، نعيد FlatList
مكونًا. ثم نمرر بعض الدعائم. data
هي مجموعة مقالات من this.state
. و renderItem
يأخذ وظيفة لتقديم كل عنصر في مجموعة، ولكن في حالتنا فإنها ترجع مجرد Article
عنصر استوردنا سابقا (أننا سنصل إلى ذلك). ونقوم بتمرير عنصر المقالة كخاصية لاستخدامها لاحقًا في هذا المكون.
المادة. js
في src / المكونات ، قم بإنشاء ملف JavaScript جديد واسمه article.js
لنبدأ بتثبيت مكتبتين بسيطتين باستخدام npm:تفاعل العناصر الأصلية ، مما يعطينا بعض العناصر المسبقةالمكونات التي يمكننا استخدامها ، واللحظة التي ستتعامل مع وقتنا.
قم بتثبيتها باستخدام npm:
npm install --save react-native-elements moment
في article.js:
هناك الكثير مما يجري هنا. أولاً ، نبدأ بإتلاف article
التابع styles
والكائن المحدد أسفل الفئة .
داخل عملية العرض ، نحدد ثابت الوقت لتخزين الوقت الذي تم فيه نشر المقالة. نحن نستخدم مكتبة حظة لتحويل التاريخ إلى الوقت مرت منذ ذلك الحين ، ونحن نمر publishedAt
أو وقت من الآن إذا publishedAt
هو null
.
defaultImg
is assigned an image URL in case the URL of the article image is null.
The render method returns TouchableNativeFeedback
to handle when the user presses the card. We pass it some props: useForground
, which tells the element to use the foreground when displaying the ripple effect on the card, and onPress
, which takes a function and executes it when the user presses the card. We passed () => Linking.openUrl(u
rl) , which will simply open the URL to the full article when we press the card.
The card takes three props: featuredTitle
, which is a title placed over the image, featuredTitleStyle
to style it, and image
which is the article image from the article prop. Otherwise, if its null
, it’s going to be the defaultImg
.
.. featuredTitle={title} featuredTitleStyle={featuredTitleStyle} image={ defaultImg }..
As for the text element, it will hold the description for the article.
{description}
We added a divider to separate the description fromالوقت واسم المصدر .
أدناه Divider
، لدينا View
اسم يحتوي على اسم المصدر ووقت نشر المقالة.
.. {source.name.toUpperCase()} {time}..
بعد ذلك class
، حددنا أنماط هذه المكونات.
الآن إذا قمنا بتشغيل التطبيق:


ها أنت ذا! الكود المصدري للتطبيق متاح على GitHub: هنا ، لا تتردد في تفرعها.
أتمنى أن تكون قد استمتعت بمقالتي! إذا كان لديك أي أسئلة على الإطلاق ، فلا تتردد في التعليق أو التواصل معي على تويتر وسأساعدك بالتأكيد :)
اشتري لي قهوة؟
القصة التالية كيفية إنشاء تطبيقات سطح المكتب الأصلية باستخدام JavaScript