اذهب إلى المحتوى

محمد أبو عواد

الأعضاء
  • المساهمات

    6234
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    95

إجابات الأسئلة

  1. إجابة محمد أبو عواد سؤال في توافق react-slick مع nextjs كانت الإجابة المقبولة   
    ربما لم تقم بتثبيت الحزمة, يمكنك تثبيتها كالتالي
    npm install slick-carousel --save إذا كنت تستخدم yarn، يمكنك تثبيتها كالتالي
    yarn add slick-carousel ثم قم  باستيراد ملفات css الخاصة بالحزمة React-slick كالتالي
    import "slick-carousel/slick/slick.css"; import "slick-carousel/slick/slick-theme.css"; لا حاجة لاستخدام الاشارة "~"
  2. إجابة محمد أبو عواد سؤال في كيفية تكوين ملف next.config.js بالطريقة الصحيحة كانت الإجابة المقبولة   
    يمكنك فعل التالي
    module.exports = withCSS(withFonts(withSass( withImages({ distDir: '../_next', webpack(config) { return config; } }) ))) يمكنك محاولة استخدام  next-compose, تساعدك بتكوين ملف next.config.js بطريقة بسيطة , يمكنك تثبيتها باستخدام الامر التالي
    npm install -D next-compose أما عن استخدامها فهي بهذا الشكل, مثال بسيط مع حزم TypeScript و Sass:
    const withTS = require('@zeit/next-typescript') const withSass = require('@zeit/next-sass') const compose = require('next-compose') const tsConfig = {/** ts config here */} const sassConfig = {/** sass config here */} module.exports = compose([ [withTS, tsConfig], [withSass, sassConfig], { webpack: (config) => { /**some special code */ return config } } ]) مثال على إنشاء vendor.css و app.css من ملحقات إدخال مختلفة:
    const withLess = require('@zeit/next-less') const withSass = require('@zeit/next-sass') const ExtractTextPlugin = require('extract-text-webpack-plugin') const commonsChunkConfig = require('@zeit/next-css/commons-chunk-config') const compose = require('./scripts/next-compose')} const extractVendorCSSPlugin = new ExtractTextPlugin('static/vendor.css') const extractAppCSSPlugin = new ExtractTextPlugin('static/app.css') module.exports = compose([ [withLess, { cssLoaderOptions: { modules: false }, lessLoaderOptions: { /** less loader options */ }, extractCSSPlugin: extractVendorCSSPlugin }], [withSass, { cssLoaderOptions: { modules: true, localIdentName: '[local]-[hash:base64:5]', }, sassLoaderOptions: { /** sass loader options */ }, extractCSSPlugin: extractAppCSSPlugin, }], { webpack(config, options) { config.plugins.push(extractVendorCSSPlugin) config.plugins.push(extractAppCSSPlugin) if (!options.isServer) { config = commonsChunkConfig(config, /\.(less|scss|sass)$/) } return config } } ])  
  3. إجابة محمد أبو عواد سؤال في خطأ عند تهجير الجداول في لارافيل كانت الإجابة المقبولة   
    المشكلة أنك تحاول اعطاء خاصية unsigned لعمود من نوع سلسلة نصية, وهذا غير منطقي, الخطأ بالتحديد في هذا السطر
    $table->string('country_id')->nullable()->unsigned(); الخاصية unsigned هو قيد على قيمة العمود بأنه لا يمكن أن تكون قيمة سالبة, ويجب ان يكون نوع العمود رقم, ولذلك يعطيك هذا الخطأ, حاول تعديل السطر ليكون كالتالي
    $table->string('country_id')->nullable(); أو يمكنك تحويل نوع العمود الى integer , بناء على اسم الحقل country_id فهو يجب أن يكون من نوع intger فيكون شكل الكود كالتالي
    $table->integer('country_id')->nullable()->unsigned(); ثم نفذ الامر مرة أخرى
  4. إجابة محمد أبو عواد سؤال في خطأ عند استخدام أيقونات Bootstrap و Webpack 5 كانت الإجابة المقبولة   
    من الخطأ الواضح أن لا يستطيع معالجة الأيقونات, وهذا خطأ اما ناتج عن كتابة صيغ الأيقونات بطريقة خاطئة, أو أنه لا يوجد حزمة لمعالجة الأيقونات, يمكننا استخدام حزمة file-loader لمعالجة الأيقونات, يمكنك تثبيتها كالتالي
    npm i file-loader --save-dev اذا استمرت المشكلة, تكون بسبب كتابة كود المعالجة بطريقة خاطئة, يمكنك استخدام الكود التالي
    test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, include: path.resolve(__dirname, './node_modules/bootstrap-icons/font/fonts'), use: { loader: 'file-loader', options: { name: '[name].[ext]', outputPath: 'webfonts', publicPath: '../webfonts', }, }  
  5. إجابة محمد أبو عواد سؤال في خطأ في _document.js عندما أعمل build في nextjs كانت الإجابة المقبولة   
    هذه مشكلة تم ظهورها في آخر تحديث لـ Nextjs, ولإصلاحها يجب ترقية Nextjs إلى هذا الإصدار 11.1.3-canary.7 من خلال الأمر التالي
    npm i next@11.1.3-canary.7 ,وإذا كنت لا تزال تواجه نفس الخطأ ، فتأكد من مسح ذاكرة التخزين الموقت للمتصفح من خلال تحديث الصفحة بالضغط على الزرين ctrl+f5 , ومسح ذاكرة التخزين الموقت ل npm من خلال الأمر التالي
    npm cache clean --force  
  6. إجابة محمد أبو عواد سؤال في تعيين قيمة لخانة cell بناء على رقمها index في pandas كانت الإجابة المقبولة   
    يمكنك استخدام .iat / .at , لنفترض أن لديك إطار data_frame التالي
    A B C 0 1 8 4 1 3 9 6 2 22 33 52 إذا أردنا تعديل قيمة الخلية [0 ، "A"] يمكنك استخدام أحد هذه الحلول:
    df.iat[0,0] = 2 df.at[0,'A'] = 2 وإليك مثال كامل عن كيفية استخدام iat للحصول على قيمة الخلية وتعيينها:
    def prepossessing(df): for index in range(0,len(df)): df.iat[index,0] = df.iat[index,0] * 2 return df أو يمكنك استخدام الحل الآتي
    df.loc[index_position, "column_name"] = some_value  
  7. إجابة محمد أبو عواد سؤال في استيراد الصور ديناميكيًا من webpack كانت الإجابة المقبولة   
    هذه الدالة سوف تحل المشكلة تماما
    const importAll = require => require.keys().reduce((acc, next) => { acc[next.replace("./", "")] = require(next); return acc; }, {}); const images = importAll( require.context("./image", false, /\.(png|jpe?g|svg)$/) ); أو يمكنك عمل require ل static method وظيفتها استيراد للملفات داخل ملف العرض. مثل المثال التالي
    render() { const { someProp, } = this.props const graphImage = require('./graph-' + anyVariable + '.png') const tableImage = require('./table-' + anyVariable2 + '.png') return ( <img src={graphImage}/> ) }  
  8. إجابة محمد أبو عواد سؤال في next/image لا تقوم بتحميل الصور من عنوان URL خارجي كانت الإجابة المقبولة   
    يجب ضبط اعدادات ملف next.config.js أولا, في ملف next.config.js يجب اضافة الكود التالي
    module.exports = { images: { domains: ['images.unsplash.com'], }, } في ملف الصفحة
    <Image alt="" src="https://images.unsplash.com/photo-1464375117522-1311d6a5b81f?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&auto=format&fit=crop&w=2250&q=80" width={2250} height={1390} layout="responsive" />  
  9. إجابة محمد أبو عواد سؤال في استخدام حزمة webpack مع مشروع PHP و JS كانت الإجابة المقبولة   
    بداية يجب أن تثبتي الحزمتين webpack و webpack-cli من خلال الأمر التالي
    npm install --save-dev webpack webpack-cli ثم يجب ان تقومي باشناء مجلد البناء بداخل مجلد المشروع , ثم تنشئين فيه الملفات التالية
    config.base.js config.production.js config.development.js بالطبع سوف تكون فارغة وسوف نملأها,لكن أولا ، سنحتاج إلى تثبيت webpack-merge من خلال الأمر التالي
    npm install --save-dev webpack-merge تسمح لنا هذه الحزمة بدمج التكوينات معا, الآن لنظبط الملف config.base.js 
    module.exports = { } من الواضح أن الملف يقوم فقط بتصدير كائن فارغ في الوقت الحالي ، لكننا سنحتاج إلى ذلك للخطوات التالية , ضع هذا الكود في الملف config.production.js
    const merge = require('webpack-merge') module.exports = merge(require('./config.base.js'), { mode: 'production' }) ونفس الكود تقريبا في الملف config.development.js
    const merge = require('webpack-merge') module.exports = merge(require('./config.base.js'), { mode: 'development', watch: true }) الآن لتشغيل العملية من خلال الأمر التالي
    npx webpack --config build/config.development.js قم بإنشاء ملف جديد ليكن اسمه paths.js في مجلد البناء الذي أنشأته سابقا وجعل وظيفته تصدير بعض المسارات التي نريد استخدامها لاحقا:
    const path = require('path') module.exports = { SRC: path.resolve(__dirname, '..', 'public'), DIST: path.resolve(__dirname, '..', 'public', 'dist'), ASSETS: '/dist' } والآن نفذي الأمر التالي
    npx webpack --config build/config.development.js في ملف package.json أضيفي الكود التالي
    { "scripts": { "dev": "webpack --config build/config.development.js", "prod": "webpack --config build/config.production.js" } } يمكنك الآن تشغيل المشروع باستخدام الاوامر npm run dev و  npm run prod , الآن ضعي الكود التالي في config.base.js 
    const path = require('path') const { SRC, DIST, ASSETS } = require('./paths') module.exports = { entry: { scripts: path.resolve(SRC, 'js', 'index.js') }, output: { // Put all the bundled stuff in your dist folder path: DIST, // Our single entry point from above will be named "scripts.js" filename: '[name].js', // The output path as seen from the domain we're visiting in the browser publicPath: ASSETS } }  
    الآن قومي بإنشاء ملف JavaScript ويجب أن يكون في المجلد src , لنقم بإنشاء هذا الملف بالمحتوى التالي:
    import './jquery.min.js' import './jquery.migrate.js' import './jquery.bxslider.min.js' import './jquery.appear.js' import './jquery.countTo.js' import './bootstrap.js' كما ترى ، يقوم index.js فقط باستيراد جميع الملفات التي تريد استخدامها. الآن نفذي الامر
    npm run prod هكذا تكوني قد حصلتي على إعدادات webpack بشكل فعال
  10. إجابة محمد أبو عواد سؤال في استهداف الرابط النشط عندما يكون المسار نشطًا في Next.js كانت الإجابة المقبولة   
    بداية يجب أن يكون لديك مكون يسمى Link ، مع خاصية activeClassName
    import { useRouter } from 'next/router' import PropTypes from 'prop-types' import Link from 'next/link' import React, { Children } from 'react' const ActiveLink = ({ children, activeClassName, ...props }) => { const { asPath } = useRouter() const child = Children.only(children) const childClassName = child.props.className || '' // pages/index.js will be matched via props.href // pages/about.js will be matched via props.href // pages/[slug].js will be matched via props.as const className = asPath === props.href || asPath === props.as ? `${childClassName} ${activeClassName}`.trim() : childClassName return ( <Link {...props}> {React.cloneElement(child, { className: className || null, })} </Link> ) } ActiveLink.propTypes = { activeClassName: PropTypes.string.isRequired, } export default ActiveLink ثم يكون لديك شريط تنقل به ارتباط مكون تم إنشاؤه ومحدد css :active للتمييز بين الارتباط النشط وغير النشط.
    import ActiveLink from './ActiveLink' const Nav = () => ( <nav> <style jsx>{` .nav-link { text-decoration: none; } .active:after { content: ' (current page)'; } `}</style> <ul className="nav"> <li> <ActiveLink activeClassName="active" href="/"> <a className="nav-link">Home</a> </ActiveLink> </li> <li> <ActiveLink activeClassName="active" href="/about"> <a className="nav-link">About</a> </ActiveLink> </li> <li> <ActiveLink activeClassName="active" href="/[slug]" as="/dynamic-route"> <a className="nav-link">Dynamic Route</a> </ActiveLink> </li> </ul> </nav> ) export default Nav بعد ذلك يمكنك تنفيذ شريط التنقل على صفحتك:
    import Nav from '../components/Nav' export default () => ( <div> <Nav /> <p>Hello, I'm the home page</p> </div> ) ما يحدث تماما داخل مكون link ،هو أنن نقارن قيمة router.pathname بالسمة href الخاصة ب link، إذا كانت القيمتان متطابقتان ، نقوم بوضع className المحدد لجعل الرابط يبدو نشطا.
  11. إجابة محمد أبو عواد سؤال في تفريغ الحقول باستخدام جافاسكربت كانت الإجابة المقبولة   
    المشكلة في هذا الكود
    productPrice =""; productCategory =""; productDesc =""; productName=""; أنت تفرغ المتغيرات وليس الحقول, لتفريغ الحقول يجب استخدام المتغيرات التي أسندتها للحقول , فيكون شكل الكود كالتالي
    productPriceInput.value=""; productCategoryInput.value=""; productDescInput.value=""; productNameInput.value=""; حدث الصفحة وجرب الأمر
  12. إجابة محمد أبو عواد سؤال في ما الفرق بين list و set في لغة جافا كانت الإجابة المقبولة   
    list & set يتم استخدامها لتجميع الكائنات في وحدة واحدة. يتمثل الاختلاف الرئيسي بين list و set في أن set غير مرتبة وتحتوي على عناصر مختلفة أي غير متشابهة، في حين أن list مرتبة ويمكن أن تحتوي على نفس العناصر فيها. توفر الحزمة java.util واجهة list تستخدم للحفاظ على المجموعة المرتبة. يمكن أن تحتوي list على القيم الخالية والمكررة. تعتمد دوال list على الفهرس أو ما يعرف ب index ، لذا فإن جميع العمليات مثل الإدراج والحذف والتحديث والبحث تعتمد على الفهرس, مثال على استخدام list
    import java.util.*; class ListExample{ public static void main(String args[]){ //إنشاء قائمة List<String> names = new ArrayList<String>(); // إضافة عناصر في القائمة. names.add("Mohammed"); names.add("Ahmed"); names.add("Sami"); //لطباعة القائمة نستخدم حلقة التكرار for for(String name: names) System.out.println(name); } } سوف يكون الناتج كالتالي
    Mohammed Ahmed Sami تنتمي واجهة Set إلى حزمة java.util, وكما قلنا سابقا هي غير مرتبة ، لذلك لا يحافظ على ترتيب العناصر المدخلة. تُستخدم واجهة Set لتصميم المجموعة الرياضية في Java, مثال على استخدام set
    import java.util.*; public class SetExample{ public static void main(String[] args) { // إنشاءالمجموعة Set<String> names = new HashSet<String>(); //إدخال بيانات الى المجموعة veg.add("Mohammed"); veg.add("Ahmed"); veg.add("sami"); //طباعة عناصر المجموعة System.out.println(veg); } } الاختلافات بينهما كالتالي
    list يسمح لنا بإضافة نفس العناصر أو تكرارها بينما set لا يسمح لنا بذلك list تحتفظ بترتيب القائمة بينما set لا يحافظ على الترتيب list تسمح لنا بإضافة أي عدد من القيم الخالية  بينما set تسمح لنا بإضافة قيمة فارغة واحدة على الأقل فيها فئات تطبيق list هي LinkedList و ArrayList. بينما set Tree Set و HashSet و LinkedHashSet. في list يمكننا الحصول على عنصر محدد بالفهرس من القائمة باستخدام الدالة get (). بينما set لا يمكننا العثور على العنصر من المجموعة بناء على الفهرس لأنه لا يوفر أي دالة لذلك يتم استخدام list عندما نريد الوصول إلى العناصر بشكل متكرر باستخدام الفهرس بينما set يتم استخدامه عندما نريد تصميم مجموعة من العناصر المميزة.  في list يتم استخدام الدالة listiterator () لتكرار عناصر القائمة بينما في set يتم استخدام المكرر عندما نحتاج إلى تكرار عناصر المجموعة.
  13. إجابة محمد أبو عواد سؤال في تحويل كائن لمصفوفة في جافاسكريبت كانت الإجابة المقبولة   
    لتحويل كائن إلى مصفوفة ، يمكنك استخدام إحدى الدوال الثلاثة التالية: Object.keys () و Object.values () و Object.entries (), افترض أن لديك كائن person كالتالي
    const person = { firstName: 'Mohammed', lastName: 'Sami' }; لتحويل أسماء خصائص كائن person إلى مصفوفة ، يمكنك استخدام طريقة Object.keys ():
    const property = Object.keys(person); console.log(property); سوف يكون الناتج كالتالي
    [ 'firstName', 'lastName' ] كما تلاحط الدالة Object.keys () فقط تقوم بتحويل أسماء الخصائص الى مصفوفة,
    لتحويل قيم خصائص الكائن person إلى مصفوفة ، يمكنك استخدام طريقة Object.values ()
    const values = Object.values(person); console.log(values); سوف يكون الناتج كالتالي
    [ 'Mohammed', 'Sami' ] أما اذا استخدمت  الدالة Object.entries (). كما في المثال الآتي
    const entries = Object.entries(person); console.log(entries); سوف يكون الناتج كالتالي
    [ [ 'firstName', 'Mohammed' ], [ 'lastName', 'Sami' ] ]  
  14. إجابة محمد أبو عواد سؤال في لماذا نقوم بالاستعلام عن البيانات باستخدام primary key؟ كانت الإجابة المقبولة   
    السبب بسيط وهو أنه لا يمكن للمفتاح الرئيسي أو ما يعرف بprimary key أن يتكرر وهو حقل فريد أي لا يمكن ان تتكرر قيمته, بمعنى آخر لن تجد مستخدمين لهما نفس قيمة primary key, بينما من الممكن ان يتم تكرار الاسم, فمثلا من الممكن أن يكون المستخدم الأول اسمه محمد, والثاني أيضا اسمه محمد, تخيل لو اعتمدنا على الاسم في هذه الحالة, البيانات المسترجعة لأي مستخدم سوف تكون؟ لذلك دائما نعتمد على حقل نكون متأكدين ان قيمته لن تتكرر لكي نسترجع البيانات بشكل صحيح, يمكنك الاعتماد على الايميل أو اسم المتسخدم او أي حقل تكون متأكد انه لن يتكرر , لا مشكلة في ذلك بالتأكيد, الفكرة ليس دائما في استخدام primary key , بل أن نقوم بالاستعلام باستخدام حقل لن تتكرر قيمته بين البيانات
  15. إجابة محمد أبو عواد سؤال في ما هى أفضل مكتبة أنيميشن فى react native ؟ كانت الإجابة المقبولة   
    Lottie-web هي مكتبة متنقلة لنظام التشغيل iOS والويب تمكن المصممين إنشاء رسوم متحركة رائعة دون الحاجة إلى تعيين مهندس وهذا يعني يمكنك إنشائها يدويا. لديها وثائق ممتازة وتتميز بحسن الأداء ، وسهولة الاستخدام, هناك أيضا مكتبة React Native Animatable, في معظم التطبيقات ، ستلاحظ الشرائح المتكررة والضربات الشديدة والقفز وغيرها من الرسوم, يوفر لك React Native Animatable مكونات معدة مسبقا وذات حركة جيدة ، مما يقلل من الحاجة إلى إعادة كتابة الرسوم المتحركة التي يتم استخدامها بشكل عام بنفسك. يتميز بمجموعة من الرسوم المتحركة سهلة الاستخدام لـ React Native, يمكنك التعرف على طريق الاستخدام وكيفية التعامل مع المكتبات من خلال زيارة المستودع الخاص بهما على موقع github حيث يتوفر شرح رائع وبسيط لكيفية استخدامهما
  16. إجابة محمد أبو عواد سؤال في استفسار عن المسارات القديمة في الدورات كانت الإجابة المقبولة   
    ليس المعنى هكذا بانها غير مهمة, بل العكس مهمة جدا وشروحاتها ممتازة ولا تقل جودة عن المسارات الحديثة, ولكن المسارات القديمة تشرح التقنيات بالاصدارات القديمة وأيضا التطبيقات تم تنفيذها بالاصدارات القديمة ولذلك تقوم الأكاديمية بتحديث المسارات كل فترة بما يتناسب مع الاصدارات الحديثة, المقصود بانك لن تحتاجها لأنه سوف يتم شرح كل شيء من البداية مع الاصدارات الحديثة ولذلك لا تحتاج اليها اذا لم تبدأ بها, أي يعني أن المسارات الحديثة تغنيك عن المسارات القديمة
     
  17. إجابة محمد أبو عواد سؤال في ما الفرق بين flip و update في pygame كانت الإجابة المقبولة   
    الفرق الرئيسي بين pygame.display.flip و pygame.display.update هو أن
    يقوم display.flip () بتحديث محتويات الشاشة بالكامل بينما يسمح display.update () بتحديث جزء من الشاشة ، بدلا من الشاشة بأكملها. عدم تمرير أي حجج ، يتم تحديث العرض بالكامل , لإخبار PyGame بأجزاء الشاشة التي يجب تحديثها ، يمكنك تمرير كائن pygame.Rect واحد  ، أو سلسلة منها إلى وظيفة display.update (). يخزن Rect في PyGame عرض وارتفاع بالإضافة إلى إحداثي س و ص للموضع, على سبيل المثال ، تقوم دوال built-in dawning في PyGame ودالة .blit () بإرجاع Rect ، بحيث يمكنك ببساطة تمريرها إلى وظيفة display.update () لتحديث المنطقة المراد تحديثها. نظرا لحقيقة أن display.update () تقوم فقط بتحديث أجزاء معينة من الشاشة بأكملها مقارنة بـ display.flip () ، فإن display.update () تكون أسرع في معظم الحالات.
  18. إجابة محمد أبو عواد سؤال في كيف أقوم بتعديل الوقت لـ request timeout في node.js كانت الإجابة المقبولة   
    اذا كنت تستخدم اطار عمل express يمكنك فعل ذلك من خلال استخدام timeoute كالتالي
    var server = app.listen(app.get('port'), function() { debug(server.address().port); }); server.timeout = 1000; إذا كنت لا تستخدم express ، فإن المبدأ هو نفسه, يمكنك فعل ذلك كالتالي
    var http = require('http'); var server = http.createServer(function (req, res) { setTimeout(function() { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }, 200); }).listen(1337, '127.0.0.1'); server.timeout = 20; console.log('Server running at http://127.0.0.1:1337/');  
  19. إجابة محمد أبو عواد سؤال في كيفية إيجاد عدد الصفوف بداخل dataframe في pandas كانت الإجابة المقبولة   
    بالنسبة dataframe، يمكنك استخدام أي طريقة من الطرق التالية
    len(df.index) df.shape[0] df[df.columns[0]].count() يمكن استخدام len() في Python للحصول على عدد العناصر في القائمة. لذلك ، للحصول على عدد صفوف DataFrame ، ما عليك سوى استخدام len (df). بدلا من ذلك ، يمكنك الوصول إلى جميع الصفوف وجميع الأعمدة باستخدام df.index و df.columns على التوالي ، سيعطيك len (df.columns) عدد الأعمدة. أو يمكنك استخدام df.shape الذي يرجع عدد الصفوف والأعمدة معا كمجموعة. إذا كنت تريد الوصول إلى عدد الصفوف ، فاستخدم df.shape [0] فقط. لعدد الأعمدة استخدم فقط: df.shape [1]
  20. إجابة محمد أبو عواد سؤال في كيف يمكنني دمج اثنين أو أكثر من queryset معًا في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك استخدام itertools.chain حيث يعتبر أسرع من تكرار كل قائمة وإلحاق العناصر واحدة تلو الأخرى . كما أنها تستهلك ذاكرة أقل من تحويل كل مجموعة استعلام إلى قائمة قبل التسلسل.
    from itertools import chain result_list = list(chain(page_list, post_list)) من الممكن الآن فرز القائمة الناتجة على سبيل المثال حسب التاريخ باستخدام الدالة Sorted , تقبل الدالة Sorted () generator وترجع قائمة كالتالي
    result_list = sorted( chain(page_list, post_list), key=lambda instance: instance.date_created) إذا كنت تستخدم Python 2.4 أو إصدارًا أحدث ، فيمكنك استخدام Attrgetter بدلاً من lambda ولكن لا يوجد فرق كبير بينهما
    from operator import attrgetter result_list = sorted( chain(page_list, article_list, post_list), key=attrgetter('date_created'))  
  21. إجابة محمد أبو عواد سؤال في شرح الدالة foreach في جافاسكربت كانت الإجابة المقبولة   
    اذا كنت تفهم وظيفة الدالة for فيمكنك فهم وظيفة foreach لأنهما متقاربتان من بعضهما البعض ولديهما نفس الهدف, وهو القيام بحلقة تكرار على مصفوفة , لنحاول شرحها باستخدام كود, لاحظ الكود التالي
    const myArray = ['a', 'b', 'c']; myArray.forEach(element => console.log(element)); لدينا مصفوفة وتحتوي على ثلاثة عناصر كما تلاحظ, أريد ان أطبع هذه العناصر الثلاثة, يمكننا فعل ذلك عن طريق عمل حلقة تكرار على المصفوفة هذه, يمكننا استخدام for او foreach , استخدمت في هذا الكود foreach, فكرة عملها بسيطة جدا, تقوم الدالة باستقبال عنصر واحد في كل حلقة, هذا العنصر بالتأكيد ينتمي للمصفوفة التي اجريت عليها حلقة التكرار, في البداية تستقبل العنصر الاول, ثم الثاني , وهكذا الى أن تصل للعنصر الأخير, يتم استقبال العنصر وتخزينه في المتغير element, وبالطبع يمكنك تسميته كما تريد فمثلا سوف أسميه data
    myArray.forEach(data => console.log(data)); بعد تخزين العنصر في المتغير data نستطيع أن نجري عليه العمليات التي نريد, في المثال قمت بطباعته فقط
     
  22. إجابة محمد أبو عواد سؤال في توجيه مخصص مع nextjs؟ كانت الإجابة المقبولة   
    يجب أن يكون لديك صفحة محددة في مجلد الصفحات إذا كنت لا تريد أن يقوم Next.js بإعادة التوجيه إلى 404, أنشئ ملف باسم dynamic.js في مجلد الصفحات ثم يمكنك استخدام الكود كالتالي
    import React from 'react' import { useRouter } from 'next/router' const Dynamic = () => { const router = useRouter(); const { dynamic } = router.query; return ( <div> My dynamic page slug: {dynamic} </div> ) } export default Dynamic ويمكنك الارتباط بها على النحو التالي
    <Link href="/[dynamic]" as="/dynamic-page-slug"> <a>Link to my Dynamic Page</a> </Link>  
  23. إجابة محمد أبو عواد سؤال في ما هي بالضبط طريقة getInitialProps في NextJS؟ كانت الإجابة المقبولة   
    عادة ما تكون getInitialProps دالة غير متزامنة وهي جيدة للعمليات غير المتزامنة على الخادم ثم تقوم بتمرير البيانات إلى الصفحة على شكل Props. يمكن تشغيله على الخادم والمتصفح إذا كنت تستخدم Link على سبيل المثال. بشكل عام يمكنك استخدام getInitialProps لجلب البيانات عندما يعمل المكون الخاص بك كصفحة ، وتريد تقديم البيانات Props, إذا كنت تستخدم Next.js 9.3 أو أحدث ، يوصى باستخدام getStaticProps أو getServerSideProps بدلا من getInitialProps.
  24. إجابة محمد أبو عواد سؤال في أين هو المجلد العام لمشروع nextjs؟ كانت الإجابة المقبولة   
    يحتوي مشروع Next.js على مجلد public, قم بوضع الملفات مثل favicon.png و robots.txt بداخله , هذا كل ما تحتاجه, وأيضا يمكنك وضع فيها ملفات مثل الصور وملفات css والخطوط وغيرها فيكون شكل بنية المشروع كالآتي
    /public /static /images /css /fonts robots.txt manifest.json  
  25. إجابة محمد أبو عواد سؤال في مشكلة عدم التعرف على المتحكم Target class [ProjectController] does not exist. كانت الإجابة المقبولة   
    يبدو أنك نسيت ان تكتبت مسار الملف ProjectController بشكل كامل, يجب ان يكون مسار الملف على هذا الشكل
    App\Http\Controllers\ProjectController; فيكون شكل المسار كالآتي
    Route::نوع الطلب('عنوان المسار', [App\Http\Controllers\ProjectController::class,'اسم الدالة']); أو يمكنك استدعاء الملف في أعلى ملف web.php كالآتي
    use App\Http\Controllers\ProjectController; ثم عند كتابة المسار يمكنك كتابته كالآتي
    Route::نوع الطلب('عنوان المسار', [ProjectController::class,'اسم الدالة']); ^^^^^^^^^^^^^^^^^^^^^^^^^ اذا كان نوع المسار resource يمكنك كتابته كالتالي
    Route::resource('اسم المسار', projectController::class);  
×
×
  • أضف...