React Native میں TextInput جزو صارف کے ٹیکسٹ ان پٹ کے لیے بنیادی عنصر ہے، جو HTML ان پٹ عنصر کے مشابہ ہے۔ TextInput کنٹرول شدہ اور غیر کنٹرول شدہ حالت، مختلف کی بورڈ اقسام، ان پٹ ماسک اور فوکس ایونٹ ہینڈلنگ کو سپورٹ کرتا ہے۔ React Native Docs، 2024 کے مطابق، TextInput فارمز، تلاش، چیٹس اور صارف کے ان پٹ کی ضرورت والے کسی بھی منظر نامے کے لیے ایک اہم جزو ہے۔ یہ جزو خود بخود پلیٹ فارم کے مطابق ڈھل جاتا ہے، iOS پر مقامی UITextField اور Android پر EditText استعمال کرتا ہے۔
اہم نکات
TextInput ایک React Native جزو ہے جو صارفین کو ڈیوائس کی بورڈ استعمال کرکے ٹیکسٹ داخل کرنے کی اجازت دیتا ہے۔ یہ رجسٹریشن فارمز، سرچ بارز، میسج ان پٹ فیلڈز اور صارف کے ان پٹ کی ضرورت والے کسی بھی منظر نامے کے لیے بنیادی تعمیراتی بلاک ہے۔ ویب ڈویلپمنٹ کے برعکس، جہاں علیحدہ ان پٹ اقسام (text، email، password، search) موجود ہیں، React Native میں یہ تمام مختلف شکلیں مختلف props کے ساتھ ایک ہی TextInput جزو کے ذریعے لاگو کی جاتی ہیں۔
TextInput آپریشن کے دو طریقوں کو سپورٹ کرتا ہے: کنٹرول شدہ (React حالت کے ذریعے منظم) اور غیر کنٹرول شدہ (ref استعمال کرتے ہوئے)۔ کنٹرول شدہ موڈ میں، فیلڈ کی قیمت جزو کی حالت میں محفوظ ہوتی ہے اور onChangeText کال بیک کے ذریعے اپ ڈیٹ ہوتی ہے۔ یہ نقطہ نظر زیادہ تر ایپلی کیشنز کے لیے تجویز کیا جاتا ہے کیونکہ یہ سچائی کا ایک ذریعہ فراہم کرتا ہے اور توثیق کو آسان بناتا ہے۔
React Native Handling Text Input، 2024 کے مطابق، TextInput خود بخود پلیٹ فارم کے مطابق ڈھل جاتا ہے: iOS پر یہ مقامی UITextField استعمال کرتا ہے، Android پر — EditText۔ یہ اضافی ترتیب کے بغیر آٹوکمپلیٹ، آٹوکریکشن اور سسٹم مینیو (کٹ/کاپی/پیسٹ) کے مناسب کام کو یقینی بناتا ہے۔
TextInput ان پٹ، ظاہری شکل اور رویے کو کنٹرول کرنے کے لیے props کا ایک وسیع سیٹ فراہم کرتا ہے۔ تمام props کئی زمروں میں تقسیم ہیں: قیمت کا انتظام، کی بورڈ کی قسم، اسٹائلنگ، واقعات اور پلیٹ فارم کے لیے مخصوص خصوصیات۔
value — فیلڈ کی موجودہ قیمت (کنٹرول شدہ موڈ کے لیے)۔ onChangeText — ہر ٹیکسٹ تبدیلی پر بلایا جانے والا کال بیک۔ placeholder — فیلڈ خالی ہونے پر دکھایا جانے والا اشارہ متن۔ defaultValue — غیر کنٹرول شدہ موڈ کے لیے ابتدائی قیمت۔ maxLength صارف کے داخل کردہ حروف کی زیادہ سے زیادہ تعداد کو محدود کرتا ہے۔
جزو onFocus (فیلڈ کو فوکس ملا)، onBlur (فیلڈ نے فوکس کھو دیا)، onSubmitEditing (صارف نے Enter/Return دبایا)، onKeyPress (کی دبائی) کو سپورٹ کرتا ہے۔ onEndEditing واقعہ فوکس کھونے پر تدوین مکمل ہونے کے بعد بلایا جاتا ہے۔ یہ کال بیکس پیچیدہ توثیق اور فارم جمع کرانے کی منطق کو لاگو کرنے کی اجازت دیتے ہیں۔
iOS پر: clearButtonMode (صاف بٹن)، keyboardAppearance (ہلکا/گہرا کی بورڈ)، returnKeyType (Return بٹن کی قسم)، enablesReturnKeyAutomatically۔ Android پر: textContentType (آٹو فل)، underlineColorAndroid، inlineImageLeft۔ secureTextEntry پاس ورڈ کے ان پٹ کے لیے دونوں پلیٹ فارمز پر کام کرتا ہے۔
React Native میں، TextInput دو طریقوں میں کام کر سکتا ہے۔ کنٹرول شدہ موڈ میں، React فیلڈ کی قیمت کا انتظام کرتا ہے: آپ حالت سے قیمت منتقل کرتے ہیں اور اسے onChangeText کے ذریعے اپ ڈیٹ کرتے ہیں۔ غیر کنٹرول شدہ موڈ میں، React صرف فیلڈ کو شروع کرتا ہے، اور DOM جیسی قیمت مقامی جزو کے اندر محفوظ ہوتی ہے۔
کنٹرول شدہ موڈ ان تمام فارمز کے لیے تجویز کیا جاتا ہے جنہیں ان پٹ ڈیٹا کی توثیق، فلٹرنگ یا فارمیٹنگ کی ضرورت ہوتی ہے۔ فیلڈ کی حالت React جزو کی حالت کے ساتھ مطابقت رکھتی ہے، جو قیمت پر مکمل کنٹرول دیتی ہے۔
const LoginForm = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
return (
<View>
<TextInput
placeholder="Email"
value={email}
onChangeText={setEmail}
keyboardType="email-address"
autoCapitalize="none"
/>
<TextInput
placeholder="Password"
value={password}
onChangeText={setPassword}
secureTextEntry
maxLength={32}
/>
</View>
);
};
اس مثال میں، دونوں فیلڈز کنٹرول شدہ موڈ استعمال کرتے ہیں۔ ای میل فیلڈ میں email-address کی بورڈ کی قسم ہے اور خودکار کیپیٹلائزیشن غیر فعال ہے۔ پاس ورڈ فیلڈ ان پٹ حروف کو چھپانے کے لیے secureTextEntry استعمال کرتا ہے اور maxLength کے ذریعے 32 حروف تک محدود ہے۔
غیر کنٹرول شدہ موڈ سادہ فیلڈز کے لیے موزوں ہے جنہیں توثیق یا ان پٹ پر فوری ردعمل کی ضرورت نہیں ہوتی۔ فیلڈ کی قیمت فارم جمع کرانے کے وقت ref کے ذریعے حاصل کی جاتی ہے۔
const SimpleSearch = () => {
const inputRef = useRef(null);
const handleSearch = () => {
console.log(inputRef.current.value());
};
return (
<TextInput
ref={inputRef}
placeholder="Search..."
onSubmitEditing={handleSearch}
/>
);
};
غیر کنٹرول شدہ موڈ میں، جزو تیزی سے رینڈر ہوتا ہے کیونکہ اسے ہر ٹیکسٹ تبدیلی پر حالت کی مطابقت پذیری کی ضرورت نہیں ہوتی۔ تاہم، آپ ریئل ٹائم میں ان پٹ کو فلٹر، فارمیٹ یا توثیق کرنے کی صلاحیت کھو دیتے ہیں۔
TextInput مختلف کی بورڈ اقسام کو سپورٹ کرتا ہے جو متوقع ان پٹ فارمیٹ کے مطابق ترتیب کو ڈھال لیتے ہیں۔ صحیح کی بورڈ کی قسم کا انتخاب صارف کے تجربے کو بہتر بناتا ہے اور موبائل آلات پر ان پٹ کی غلطیوں کو کم کرتا ہے۔
| keyboardType کی قیمت | وضاحت | کب استعمال کریں |
|---|---|---|
| default | معیاری حروف تہجی کی بورڈ | پہلا نام، آخری نام، پتہ |
| numeric | عددی کی بورڈ (صرف ہندسے) | عمر، مقدار، PIN کوڈ |
| email-address | @ اور .com والا کی بورڈ | رجسٹریشن فارم میں ای میل فیلڈ |
| phone-pad | + اور # والا فون کی بورڈ | فون نمبر |
| url | / اور .com والا کی بورڈ | ویب پتہ درج کرنا |
| decimal-pad | اعشاری نقطے والا عددی کی بورڈ | قیمت، وزن، سائز |
iOS پر اضافی اقسام دستیاب ہیں: numbers-and-punctuation، twitter، web-search (صوتی تلاش کے ساتھ)۔ Android پر visible-password بھی دستیاب ہے (پاس ورڈ دکھاتا ہے)۔ صحیح keyboardType کا انتخاب موبائل ایپلی کیشن UX کا ایک اہم پہلو ہے۔
پلیٹ فارم کی خصوصیات میں autoCapitalize (پہلے لفظ کا خودکار بڑا حرف)، autoCorrect (خودکار تصحیح)، spellCheck (ہجے کی جانچ)، textContentType (iOS پر آٹو فل) بھی شامل ہیں۔ یہ props ہر پلیٹ فارم پر مختلف طریقے سے کام کرتے ہیں اور جانچ کی ضرورت ہوتی ہے۔
آئیے دو حقیقی منظرناموں پر غور کریں: پیغام کے ان پٹ کے لیے کثیر السطری فیلڈ اور ماسک شدہ فون نمبر ان پٹ فیلڈ۔ دونوں مطلوبہ رویہ حاصل کرنے کے لیے مختلف props کے ساتھ TextInput استعمال کرتے ہیں۔
لمبا متن (تبصرے، وضاحتیں) درج کرنے کے لیے، TextInput multiline prop کے ذریعے کثیر السطری موڈ میں تبدیل ہوتا ہے۔ اس موڈ میں، فیلڈ عمودی طور پر بڑھتا ہے اور لائن بریک کو سپورٹ کرتا ہے۔
const MessageInput = ({ onSend }) => {
const [text, setText] = useState('');
return (
<TextInput
style={styles.input}
multiline
numberOfLines={4}
placeholder="Write a message..."
value={text}
onChangeText={setText}
textAlignVertical="top"
/>
);
};
multiline prop کثیر السطری موڈ کو فعال کرتا ہے، numberOfLines لائنوں میں ابتدائی اونچائی مقرر کرتا ہے۔ textAlignVertical: 'top' متن کو اوپر سیدھ میں لاتا ہے (پہلے سے طے شدہ طور پر، Android کثیر السطری TextInput متن کو عمودی طور پر مرکز کرتا ہے)۔
فون نمبر درج کرنے کے لیے، اکثر ریئل ٹائم فارمیٹنگ کی ضرورت ہوتی ہے۔ onChangeText کو ریگولر ایکسپریشنز کے ساتھ ملا کر، آپ ایک ان پٹ ماسک لاگو کر سکتے ہیں۔
const PhoneInput = () => {
const [phone, setPhone] = useState('');
const formatPhone = (text) => {
const cleaned = text.replace(/\D/g, '');
if (cleaned.length <= 11) {
return cleaned.replace(
/(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})/,
'+$1 ($2) $3 $4 $5'
);
}
return cleaned;
};
return (
<TextInput
keyboardType="phone-pad"
value={phone}
onChangeText={(t) => setPhone(formatPhone(t))}
placeholder="+7 (999) 123 45 67"
maxLength={20}
/>
);
};
formatPhone فنکشن تمام غیر ہندسوں والے حروف کو ہٹاتا ہے اور نمبر کو معیاری بین الاقوامی فارمیٹ میں فارمیٹ کرتا ہے۔ keyboardType: 'phone-pad' فون کی بورڈ دکھاتا ہے۔ یہ نقطہ نظر فون نمبر کے ان پٹ کے لیے UX کو بہتر بناتا ہے اور فارمیٹنگ کی غلطیوں کو روکتا ہے۔
اکثر پوچھے گئے سوالات
value کنٹرول شدہ موڈ میں استعمال ہوتا ہے — React حالت کے ذریعے دکھائے گئے متن کا انتظام کرتا ہے۔ defaultValue غیر کنٹرول شدہ موڈ میں استعمال ہوتا ہے — یہ ابتدائی قیمت مقرر کرتا ہے، اور بعد کی تبدیلیاں جزو کے اندر محفوظ ہوتی ہیں۔
secureTextEntry prop کو true پر سیٹ کریں۔ TextInput داخل کردہ حروف کو چھپا دے گا، انہیں نقطوں یا ستاروں سے بدل دے گا۔ اضافی سیکیورٹی کے لیے، آپ اسے maxLength اور autoCapitalize: 'none' کے ساتھ ملا سکتے ہیں۔
onChangeText ہر ٹیکسٹ تبدیلی پر بلایا جاتا ہے، جس میں ایک حرف کا اضافہ اور حذف کرنا شامل ہے۔ یہ کنٹرول شدہ جزو کا معمول کا رویہ ہے۔ اصلاح کے لیے، آپ debounce استعمال کر سکتے ہیں یا onEndEditing پر حالت اپ ڈیٹ کر سکتے ہیں۔
TextInput براہ راست اندر موجود عناصر کو سپورٹ نہیں کرتا۔ حل یہ ہے کہ Flexbox کے ساتھ ایک View کنٹینر بنائیں، جس کے اندر آپ ایک آئیکن اور TextInput رکھیں۔ کنٹینر کا اسٹائل ان پٹ فیلڈ کی بارڈر کی نقل کرتا ہے، اور TextInput باقی جگہ بھرنے کے لیے پھیلتا ہے۔
Android پر، TextInput میں پہلے سے طے شدہ طور پر ایک نیچے کی بارڈر (Material Design) ہوتی ہے۔ اسے underlineColorAndroid: 'transparent' سے غیر فعال کریں۔ یہ prop صرف Android پر کام کرتا ہے اور متن کے نیچے نظر آنے والی لکیر کو ہٹاتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں