MotionHighlight
علامات تبويب أو مفاتيح مقسّمة أو تنقّل من البيانات، مع تمييز واحد ينتقل إلى الاختيار.
الويبReact Nativeالاختيار والصفحات
جرّبه
جارٍ تجهيز المثال…
أقصر استخدام
<MotionHighlight
items={['Overview', 'Activity', 'Settings']}
value={tab}
onValueChange={setTab}
hover
/>;ما يتولّاه عنك
- تمييز واحد يتحرك ويتغيّر حجمه بين العناصر؛ نسّقه عبر
highlightClassName. - تأتي العناصر من
items، والمفاتيح منgetKey، والتسميات منrenderItem. - يجعله
hoverيتبع المؤشر ثم يعود إلى الاختيار. - يمكن للعناصر أن تلتف على عدة صفوف، ويتبعها التمييز.
- يُعاد القياس تلقائيًا عند تحميل الخطوط وتغيّر التخطيط.
استخدمه لـ
- علامات تبويب صفحة.
- شريط مرشّحات.
- مفتاح مقسّم في نموذج إعدادات.
Props
| Prop | النوع | الافتراضي | الوصف |
|---|---|---|---|
items | readonly T[] | —إلزامي | مصفوفة بياناتك. |
value | key | null | —إلزامي | مفتاح العنصر المميَّز؛ وnull يخفي التمييز. |
onValueChange | (key, item) => void | يعمل مع المفتاح والعنصر حين يُضغط عنصر. | |
getKey | (item) => string | number | item.id | تعيد مفتاحًا فريدًا ثابتًا لعنصر. افتراضيًا item.id، أو العنصر نفسه للنصوص والأرقام. |
renderItem | (item, { selected, index }) => ReactNode | item.label | يرسم عنصرًا؛ ويتلقى ما إذا كان مختارًا. |
hover | boolean | false | اتبع المؤشر فوق العناصر وعُد إلى value عند المغادرة (الويب). |
itemAs | element | 'button' | العنصر لكل بند. |
itemClassName | string | صنف لعنصر كل بند؛ ويضبط itemStyle نمطه المضمّن. | |
highlightClassName | string | صنف التمييز؛ ويضبط highlightStyle نمطه المضمّن. | |
transition | Transition | spring | منحنى توقيت { duration, easing } أو نابض { tempo: 'spring', spring }. تحتفظ النوابض بزخمها عند المقاطعة. |
تذهب props الأخرى إلى العنصر المعروض، فتعمل className وstyle ومعالجات الأحداث كالمعتاد.
الويب وReact Native
يُعرض كل عنصر افتراضيًا كـ button (ويغيّره itemAs)؛ والضغط عليه يستدعي onValueChange(key, item).
في React Native العناصر من نوع Pressable؛ ويعمل الموضع على المشغّل الأصلي، والحجم على عرض متداخل يقوده JavaScript.