JavaScript في JSX باستخدام الأقواس المنحنية
تتيح لك JSX كتابة ترميز شبيه بـ HTML داخل ملف JavaScript، مما يسمح بالحفاظ على منطق التصيير والمحتوى في المكان نفسه. في بعض الأحيان، قد ترغب في إضافة بعض منطق لغة JavaScript أو الإشارة إلى خاصية ديناميكية داخل هذا الترميز. في هذه الحالة، يمكنك استخدام الأقواس المنحنية داخل JSX الخاص بك لفتح نافذة للغة JavaScript.
You will learn
- كيفية تمرير النصوص (string) باستخدام علامات التنصيص
- كيفية الإشارة إلى متغير JavaScript داخل JSX باستخدام الأقواس المعقوفة
- كيفية استدعاء دالة JavaScript داخل JSX باستخدام الأقواس المنحنية
- كيفية استخدام كائن JavaScript داخل JSX باستخدام الأقواس المعقوفة
تمرير النصوص باستخدام علامات التنصيص
عندما ترغب في تمرير نص إلى JSX، يتم وضعها بين علامات تنصيص مفردة أو مزدوجة:
export default function Avatar() { return ( <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> ); }
هنا، يتم تمرير "https://i.imgur.com/7vQD0fPs.jpg"
و "Gregorio Y. Zara"
كنصوص.
ولكن ماذا لو كنت ترغب في تحديد src
أو نص alt
بشكل ديناميكي؟ يمكنك استخدام قيمة من JavaScript عن طريق استبدال "
و "
بـ {
و }
:
export default function Avatar() { const avatar = 'https://i.imgur.com/7vQD0fPs.jpg'; const description = 'Gregorio Y. Zara'; return ( <img className="avatar" src={avatar} alt={description} /> ); }
لاحظ الاختلاف بين className="avatar"
، الذي يحدد اسم فئة CSS "avatar"
الذي يجعل الصورة دائرية، وsrc={avatar}
الذي يقرأ قيمة متغير JavaScript المسمى avatar
. هذا لأن الأقواس المنحنية تتيح لك العمل مع لغة JavaScript مباشرة داخل الترميز الخاصة بك!
استخدام الأقواس المنحنية: نافذة إلى عالم JavaScript
JSX هي طريقة خاصة لكتابة JavaScript. وهذا يعني أنه يمكن استخدام JavaScript داخلها - باستخدام الأقواس المعقوفة { }
. في المثال أدناه، يتم تعريف اسم للعالِم، name
، ثم يتم تضمينه بواسطة الأقواس المنحنية داخل عنصر <h1>
.
export default function TodoList() { const name = 'Gregorio Y. Zara'; return ( <h1>قائمة مهام {name}</h1> ); }
حاول تغيير قيمة name
من 'Gregorio Y. Zara'
إلى 'Hedy Lamarr'
. لاحظ كيف يتغير عنوان القائمة؟
أي تعبير JavaScript سيعمل بين الأقواس المعقوفة، بما في ذلك استدعاءات الدوال مثل formatDate()
:
const today = new Date(); function formatDate(date) { return new Intl.DateTimeFormat( 'en-US', { weekday: 'long' } ).format(date); } export default function TodoList() { return ( <h1>قائمة مهام لـ {formatDate(today)}</h1> ); }
أين يجب استخدام الأقواس المنحنية؟
يمكنك استخدام الأقواس المنحنية في JSX بطريقتين فقط:
- كنص مباشرة داخل وسم JSX:
<h1>{name}'s قائمة المهام</h1>
يعمل، ولكن<{tag}>قائمة المهام لـ Gregorio Y. Zara</{tag}>
لن يعمل. - كخصائص تأتي فورًا بعد علامة
=
:src={avatar}
ستقرأ قيمة المتغيرavatar
، ولكنsrc="{avatar}"
ستمرره"{avatar}"
كنص.
استخدام “أقواس منحنية مزدوجة”: CSS وكائنات أخرى داخل JSX
بالإضافة إلى النصوص والأرقام وتعابير JavaScript الأخرى، يمكنك تمرير الكائنات في JSX. يتم تمييز الكائنات أيضًا بواسطة الأقواس المنحنية، مثل { name: "Hedy Lamarr", inventions: 5 }
. لذلك، لتمرير كائن JavaScript في JSX، يجب عليك إحاطة الكائن بزوج آخر من الأقواس المنحنية: person={{ name: "Hedy Lamarr", inventions: 5 }}
.
قد ترى ذلك في أنماط CSS المضمنة فيJSX. React لا تتطلب منك استخدام أنماط CSS مضمنة (فئة CSS يعمل جيداً في معظم الحالات). ولكن عندما تحتاج إلى أسلوب مضمن، يمكنك تمرير كائن إلى خاصية style
:
export default function TodoList() { return ( <ul style={{ backgroundColor: 'black', color: 'pink' }}> <li>تحسين الهاتف</li> <li>تجهيز محاضرات عن الطيران</li> <li>العمل على محرك بالوقود الكحولي</li> </ul> ); }
حاول تغيير قيم backgroundColor
و color
.
يمكنك رؤية كائن JavaScript بوضوح داخل الأقواس المنحنية عندما تكتبه بهذه الطريقة:
<ul style={
{
backgroundColor: 'black',
color: 'pink'
}
}>
في المرة القادمة التي ترى {{
و }}
في JSX، أعلم أنه ليس سوى كائن داخل أقواس JSX المنحنية!
المزيد من المرح مع كائنات JavaScript والأقواس المنحنية!
يمكنك دمج العديد من التعابير في كائن واحد والإشارة لهم في JSX الخاص بك داخل الأقواس المنحنية:
const person = { name: 'Gregorio Y. Zara', theme: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={person.theme}> <h1>{person.name}'s Todos</h1> <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>تحسين الهاتف</li> <li>تجهيز محاضرات عن الطيران</li> <li>العمل على محرك بالوقود الكحولي</li> </ul> </div> ); }
في هذا المثال، يحتوي كائنJavaScript person
على نص name
وكائن theme
:
const person = {
name: 'Gregorio Y. Zara',
theme: {
backgroundColor: 'black',
color: 'pink'
}
};
يمكن للمكوّن استخدام قيم من الكائن person
كالتالي:
<div style={person.theme}>
<h1>قائمة مهام {person.name}</h1>
JSXهي لغة قوالب بسيطة جدًا لأنها تسمح لك بتنظيم البيانات والمنطق باستخدام JavaScript.
Recap
الآن تعرف تقريبًا كل شيء عن JSX:
- يتم تمرير خصائص JSX في شكل strings داخل أقواس تنصيص
- تسمح لك الأقواس المعقوفة بإضافة منطق ومتغيرات JavaScript داخل الترميز الخاص بك.
- تعمل الأقواس المعقوفة داخل محتوى وسم JSX أو مباشرة بعد
=
في الخصائص. {{
و}}
ليست بصيغة خاصة: إنما هي كائن JavaScript موجود داخل أقواس JSX المعقوفة.
Challenge 1 of 3: أصلح الخطأ
هذا الكود يتعطل ويظهر خطأ Objects are not valid as a React child
:
const person = { name: 'Gregorio Y. Zara', theme: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={person.theme}> <h1>{person}'s Todos</h1> <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>Improve the videophone</li> <li>Prepare aeronautics lectures</li> <li>Work on the alcohol-fuelled engine</li> </ul> </div> ); }
هل يمكنك إيجاد المشكلة؟