ورودی هشتگ (Hashtag Input)
کامپوننت ورودی هشتگ برای اینستاگرام و شبکههای اجتماعی
معرفی
کامپوننت HashtagInput مشابه TagInput است با این تفاوت که هشتگها را با پیشوند # نمایش میدهد. مقدار ذخیرهشده بدون # است (فقط کلمه کلیدی)، اما نمایش آن با # همراه است.
کاربر میتواند هشتگ را با یا بدون # وارد کند — کامپوننت بهصورت خودکار # اضافی را حذف میکند.
چه زمانی استفاده کنیم:
- برای ورود هشتگهای شبکههای اجتماعی (اینستاگرام، توییتر و ...)
- وقتی مقادیر ورودی باید با پیشوند
#نمایش داده شوند - در فرمهای مدیریت پستهای شبکه اجتماعی
چه زمانی استفاده نکنیم:
- برای tag های غیرهشتگ — از
TagInputاستفاده کنید - وقتی هشتگها باید از لیست انتخاب شوند — از
MultiSelectاستفاده کنید
استفاده
مقادیر ذخیرهشده: #پرتو, #تهران
import { HashtagInput } from '@parto-system-design/ui'
export default function MyComponent() {
const [hashtags, setHashtags] = React.useState<string[]>(['پرتو', 'تهران'])
return <HashtagInput value={hashtags} onChange={setHashtags} placeholder="هشتگ جدید اضافه کنید..." />
}نکته: مقادیر در value/onChange بدون # ذخیره میشوند. مثلاً ['پرتو', 'تهران'] در خروجی به #پرتو و #تهران تبدیل میشود.
حداکثر تعداد هشتگ
3/10 هشتگ
<HashtagInput value={hashtags} onChange={setHashtags} placeholder="#هشتگ جدید..." maxTags={10} />حالت غیرفعال
<HashtagInput defaultValue={['ایران', 'تهران']} disabled />مثال عملی: فرم هشتگ پست اینستاگرام
import { HashtagInput, Label, Button } from '@parto-system-design/ui'
export default function PostForm() {
const [hashtags, setHashtags] = React.useState<string[]>([])
const handleSubmit = () => {
// hashtags = ['پرتو', 'تهران', 'بلاگر']
// برای ارسال به API بدون # استفاده میشود
const formattedHashtags = hashtags.map((h) => `#${h}`).join(' ')
console.log(formattedHashtags) // '#پرتو #تهران #بلاگر'
}
return (
<div className="space-y-4" dir="rtl">
<div className="space-y-2">
<Label>هشتگهای پست (حداکثر ۳۰)</Label>
<HashtagInput value={hashtags} onChange={setHashtags} placeholder="#هشتگ بزنید..." maxTags={30} />
<p className="text-xs text-muted-foreground">{hashtags.length}/30 هشتگ</p>
</div>
<Button onClick={handleSubmit}>انتشار پست</Button>
</div>
)
}تفاوت با TagInput
| ویژگی | TagInput | HashtagInput |
|---|---|---|
| نمایش | تگ | #تگ |
| ذخیرهسازی | با مقدار خام | بدون # |
| ورودی کاربر | متن آزاد | میتواند # داشته باشد یا نداشته باشد |
| کاربرد | تگهای عمومی | هشتگهای شبکه اجتماعی |
رفتار کیبورد
| کلید | عملکرد |
|---|---|
Enter | اضافه کردن هشتگ جدید (با یا بدون #) |
Backspace | حذف آخرین هشتگ (در صورت خالی بودن input) |
| کلیک روی × | حذف همان هشتگ |
Props
حالتها و انواع
حالت کنترلشده
با value و onChange آرایه هشتگها را مدیریت کنید (مقادیر بدون #).
حالت غیرکنترلشده
با defaultValue مقدار اولیه را تنظیم کنید.
با محدودیت تعداد
با maxTags حداکثر تعداد هشتگها را محدود کنید (مثلاً ۳۰ برای اینستاگرام).
حالت غیرفعال
با disabled ورودی و حذف هشتگها غیرفعال میشود.
راهنمای استفاده
بکنید
- از
maxTagsبا مقدار مناسب پلتفرم استفاده کنید (مثلاً ۳۰ برای اینستاگرام) - شمارنده هشتگها را در کنار فیلد نمایش دهید تا کاربر محدودیت را بداند - توجه داشته باشید که مقادیرonChangeبدون#هستند — هنگام ارسال به API فرمت کنید
نکنید
- برای تگهای عمومی بدون پیشوند
#از HashtagInput استفاده نکنید —TagInputمناسبتر است - بدونmaxTagsدر فرمهای شبکه اجتماعی رها نکنید — هر پلتفرم محدودیت دارد - هشتگهای دارای فاصله یا کاراکتر خاص را بدون اعتبارسنجی قبول نکنید
دسترسیپذیری
- اضافه کردن هشتگ با Enter (با یا بدون
#) - حذف آخرین هشتگ با Backspace (در صورت خالی بودن input)
- حذف هشتگ با کلیک روی دکمه ×
- پیشوند
#بهصورت خودکار به مقدار ذخیرهشده اضافه نمیشود (فقط نمایشی است) - جلوگیری از ورود هشتگهای تکراری
- دکمه حذف هر هشتگ دارای متن
sr-onlyبرای screen reader - کاملاً سازگار با RTL (فارسی، عربی)
کامپوننتهای مرتبط
- اگر نیاز به تگهای عمومی بدون پیشوند
#دارید → TagInput - اگر هشتگها باید از لیست مشخصی انتخاب شوند → MultiSelect
- اگر نیاز به نمایش هشتگها به صورت فیلتر قابل حذف دارید → FilterChip