<textarea>
Built-in browser <textarea> component பல வரி text input ஒன்றை render செய்ய உதவுகிறது.
<textarea />குறிப்பு
<textarea>
Text area ஒன்றைக் காட்ட, built-in browser <textarea> component-ஐ render செய்யவும்.
<textarea name="postContent" />மேலும் examples-ஐ கீழே பார்க்கவும்.
Props
<textarea> எல்லா common element props-ஐயும் ஆதரிக்கிறது.
value prop-ஐ அனுப்புவதன் மூலம் text area-வை controlled ஆக்கலாம்:
value: String. Text area-க்குள் உள்ள text-ஐ control செய்கிறது.
நீங்கள் value அனுப்பும்போது, அனுப்பப்பட்ட value-ஐ update செய்யும் onChange handler-ஐயும் அனுப்ப வேண்டும்.
உங்கள் <textarea> uncontrolled ஆக இருந்தால், அதற்கு பதிலாக defaultValue prop-ஐ அனுப்பலாம்:
defaultValue: String. Text area-க்கான initial value-ஐ குறிப்பிடுகிறது.
இந்த <textarea> props uncontrolled மற்றும் controlled text areas இரண்டிற்கும் பொருந்தும்:
autoComplete:'on'அல்லது'off'. Autocomplete நடத்தை எப்படியிருக்க வேண்டும் என்பதை குறிப்பிடுகிறது.autoFocus: Boolean.trueஎன்றால், mount ஆகும்போது React அந்த element-க்கு focus செய்கிறது.children:<textarea>children-ஐ ஏற்காது. Initial value அமைக்கdefaultValueபயன்படுத்தவும்.cols: Number. சராசரி character அகலங்களின் அடிப்படையில் default width-ஐ குறிப்பிடுகிறது. Default20.disabled: Boolean.trueஎன்றால், input interactive ஆக இருக்காது மற்றும் மங்கலாக தோன்றும்.form: String. இந்த input சேர்ந்திருக்கும்<form>-இன்id-ஐ குறிப்பிடுகிறது. விடப்பட்டால், அருகிலுள்ள parent form பயன்படுத்தப்படும்.maxLength: Number. Text-ன் அதிகபட்ச நீளத்தை குறிப்பிடுகிறது.minLength: Number. Text-ன் குறைந்தபட்ச நீளத்தை குறிப்பிடுகிறது.name: String. Form உடன் submit செய்யப்படும் இந்த input-ன் பெயரை குறிப்பிடுகிறது.onChange:Eventhandler function. Controlled text areas-க்கு அவசியம். பயனர் input-ன் value-ஐ மாற்றியவுடன் உடனடியாக fire ஆகும் (உதாரணமாக, ஒவ்வொரு keystroke-க்கும் fire ஆகும்). Browserinputevent போல நடக்கும்.onChangeCapture: Capture phase-இல் fire ஆகும்onChangeversion.onInput:Eventhandler function. பயனர் value-ஐ மாற்றியவுடன் உடனடியாக fire ஆகும். வரலாற்று காரணங்களால், React-இல் இதேபோல் வேலை செய்யும்onChange-ஐப் பயன்படுத்துவது idiomatic ஆகும்.onInputCapture: Capture phase-இல் fire ஆகும்onInputversion.onInvalid:Eventhandler function. Form submit ஆகும்போது input validation-ல் தோல்வியடைந்தால் fire ஆகும். Built-ininvalidevent-இற்கு மாறாக, ReactonInvalidevent bubbles செய்கிறது.onInvalidCapture: Capture phase-இல் fire ஆகும்onInvalidversion.onSelect:Eventhandler function.<textarea>-க்குள் selection மாறிய பிறகு fire ஆகும். காலியான selection-க்கும் edits-க்கும் (selection-ஐ பாதிக்கக்கூடியவை)onSelectevent fire ஆகுமாறு React விரிவாக்குகிறது.onSelectCapture: Capture phase-இல் fire ஆகும்onSelectversion.placeholder: String. Text area value காலியாக இருக்கும்போது மங்கலான நிறத்தில் காட்டப்படும்.readOnly: Boolean.trueஎன்றால், பயனர் text area-வை edit செய்ய முடியாது.required: Boolean.trueஎன்றால், form submit ஆக value வழங்கப்பட்டிருக்க வேண்டும்.rows: Number. சராசரி character உயரங்களின் அடிப்படையில் default height-ஐ குறிப்பிடுகிறது. Default2.wrap:'hard','soft', அல்லது'off'. Form submit செய்யும்போது text எப்படி wrap ஆக வேண்டும் என்பதை குறிப்பிடுகிறது.
கவனிக்க வேண்டியவை
<textarea>something</textarea>போன்ற children அனுப்புவது அனுமதிக்கப்படாது. Initial content-க்குdefaultValueபயன்படுத்தவும்.- Text area string
valueprop பெற்றால், அது controlled ஆகக் கருதப்படும். - ஒரே நேரத்தில் ஒரு text area controlled-ஆகவும் uncontrolled-ஆகவும் இருக்க முடியாது.
- Text area தனது lifetime முழுவதும் controlled நிலையிலிருந்து uncontrolled நிலைக்கு அல்லது மாறாக switch ஆக முடியாது.
- ஒவ்வொரு controlled text area-க்கும் அதன் backing value-ஐ synchronously update செய்யும்
onChangeevent handler தேவை.
பயன்பாடு
Text area காட்டுதல்
Text area ஒன்றைக் காட்ட <textarea> render செய்யவும். rows மற்றும் cols attributes மூலம் அதன் default size-ஐ குறிப்பிடலாம்; ஆனால் default ஆக பயனர் அதை resize செய்ய முடியும். Resizing-ஐ disable செய்ய, CSS-இல் resize: none குறிப்பிடலாம்.
export default function NewPost() { return ( <label> உங்கள் பதிவை எழுதுங்கள்: <textarea name="postContent" rows={4} cols={40} /> </label> ); }
Text area-க்கு label வழங்குதல்
பொதுவாக, ஒவ்வொரு <textarea>-வையும் <label> tag-க்குள் வைப்பீர்கள். இந்த label அந்த text area-வுடன் தொடர்புடையது என்பதை இது browser-க்கு தெரிவிக்கிறது. பயனர் label-ஐ click செய்யும்போது, browser text area-க்கு focus செய்கிறது. Accessibility-க்கும் இது அவசியம்: பயனர் text area-க்கு focus செய்தால் screen reader label caption-ஐ announce செய்யும்.
<textarea>-வை <label>-க்குள் nest செய்ய முடியாவிட்டால், <textarea id> மற்றும் <label htmlFor> இரண்டிற்கும் அதே ID-ஐ அனுப்பி அவற்றை associate செய்யவும். ஒரே component-ன் instances இடையே conflicts தவிர்க்க, அத்தகைய ID-ஐ useId மூலம் உருவாக்கவும்.
import { useId } from 'react'; export default function Form() { const postTextAreaId = useId(); return ( <> <label htmlFor={postTextAreaId}> உங்கள் பதிவை எழுதுங்கள்: </label> <textarea id={postTextAreaId} name="postContent" rows={4} cols={40} /> </> ); }
Text area-க்கு initial value வழங்குதல்
Text area-க்கான initial value-ஐ விருப்பமாக குறிப்பிடலாம். அதை defaultValue string ஆக அனுப்பவும்.
export default function EditPost() { return ( <label> உங்கள் பதிவைத் திருத்துங்கள்: <textarea name="postContent" defaultValue="நேற்று சைக்கிள் ஓட்டியது எனக்கு மிகவும் பிடித்திருந்தது!" rows={4} cols={40} /> </label> ); }
Form submit செய்யும்போது text area value-ஐ படித்தல்
உங்கள் textarea-வைச் சுற்றி <form> ஒன்றையும், அதன் உள்ளே <button type="submit"> ஒன்றையும் சேர்க்கவும். இது உங்கள் <form onSubmit> event handler-ஐ call செய்யும். Default ஆக, browser form data-வை current URL-க்கு அனுப்பி page-ஐ refresh செய்யும். e.preventDefault() call செய்து அந்த behavior-ஐ override செய்யலாம். new FormData(e.target) மூலம் form data-வை படிக்கவும்.
export default function EditPost() { function handleSubmit(e) { // Prevent the browser from reloading the page e.preventDefault(); // Read the form data const form = e.target; const formData = new FormData(form); // You can pass formData as a fetch body directly: fetch('/some-api', { method: form.method, body: formData }); // Or you can work with it as a plain object: const formJson = Object.fromEntries(formData.entries()); console.log(formJson); } return ( <form method="post" onSubmit={handleSubmit}> <label> பதிவின் தலைப்பு: <input name="postTitle" defaultValue="சைக்கிள் ஓட்டுதல்" /> </label> <label> உங்கள் பதிவைத் திருத்துங்கள்: <textarea name="postContent" defaultValue="நேற்று சைக்கிள் ஓட்டியது எனக்கு மிகவும் பிடித்திருந்தது!" rows={4} cols={40} /> </label> <hr /> <button type="reset">திருத்தங்களை reset செய்</button> <button type="submit">பதிவை சேமி</button> </form> ); }
State variable கொண்டு text area-வை control செய்தல்
<textarea /> போன்ற text area uncontrolled ஆகும். <textarea defaultValue="Initial text" /> போன்ற initial value-ஐ அனுப்பினாலும், உங்கள் JSX initial value-ஐ மட்டுமே குறிப்பிடுகிறது; இப்போது உள்ள value-ஐ அல்ல.
Controlled text area ஒன்றை render செய்ய, அதற்கு value prop அனுப்பவும். நீங்கள் அனுப்பிய value text area-வில் எப்போதும் இருக்கும்படி React force செய்யும். பொதுவாக, state variable ஒன்றை declare செய்து text area-வை control செய்வீர்கள்:
function NewPost() {
const [postContent, setPostContent] = useState(''); // State variable ஒன்றை declare செய்யவும்...
// ...
return (
<textarea
value={postContent} // ...input-ன் value state variable-க்கு match ஆக force செய்யவும்...
onChange={e => setPostContent(e.target.value)} // ...மேலும் எந்த edits வந்தாலும் state variable-ஐ update செய்யவும்!
/>
);
}ஒவ்வொரு keystroke-க்கும் பதிலாக UI-இன் ஏதாவது பகுதியை re-render செய்ய விரும்பினால் இது பயனுள்ளதாக இருக்கும்.
{ "dependencies": { "react": "latest", "react-dom": "latest", "react-scripts": "latest", "remarkable": "2.0.1" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" }, "devDependencies": {} }
Troubleshooting
நான் type செய்யும்போது என் text area update ஆகவில்லை
value உடன் ஆனால் onChange இல்லாமல் text area render செய்தால், console-இல் error காண்பீர்கள்:
// 🔴 Bug: controlled text area with no onChange handler
<textarea value={something} />value prop to a form field without an onChange handler. This will render a read-only field. If the field should be mutable use defaultValue. Otherwise, set either onChange or readOnly.Error message கூறுவது போல, நீங்கள் initial value-ஐ மட்டும் குறிப்பிட விரும்பினால், அதற்கு பதிலாக defaultValue அனுப்பவும்:
// ✅ Good: uncontrolled text area with an initial value
<textarea defaultValue={something} />இந்த text area-வை state variable கொண்டு control செய்ய விரும்பினால், onChange handler ஒன்றை குறிப்பிடவும்:
// ✅ Good: controlled text area with onChange
<textarea value={something} onChange={e => setSomething(e.target.value)} />Value திட்டமிட்டே read-only ஆக இருந்தால், error-ஐ suppress செய்ய readOnly prop சேர்க்கவும்:
// ✅ Good: readonly controlled text area without on change
<textarea value={something} readOnly={true} />ஒவ்வொரு keystroke-க்கும் என் text area caret தொடக்கத்துக்கு தாவுகிறது
நீங்கள் text area-வை control செய்தால், onChange போது அதன் state variable-ஐ DOM-இல் உள்ள text area value-க்கு update செய்ய வேண்டும்.
அதை e.target.value அல்லாத வேறு ஒன்றாக update செய்ய முடியாது:
function handleChange(e) {
// 🔴 Bug: updating an input to something other than e.target.value
setFirstName(e.target.value.toUpperCase());
}அதை asynchronously-ஆகவும் update செய்ய முடியாது:
function handleChange(e) {
// 🔴 Bug: updating an input asynchronously
setTimeout(() => {
setFirstName(e.target.value);
}, 100);
}உங்கள் code-ஐ சரிசெய்ய, அதை synchronously e.target.value-க்கு update செய்யவும்:
function handleChange(e) {
// ✅ Updating a controlled input to e.target.value synchronously
setFirstName(e.target.value);
}இது பிரச்சினையை சரிசெய்யவில்லை என்றால், ஒவ்வொரு keystroke-க்கும் text area DOM-இலிருந்து அகற்றப்பட்டு மீண்டும் சேர்க்கப்படுவது சாத்தியம். ஒவ்வொரு re-render-க்கும் நீங்கள் தவறுதலாக state-ஐ reset செய்தால் இது நடக்கலாம். உதாரணமாக, text area அல்லது அதன் parents-இல் ஒன்று எப்போதும் வேறு key attribute பெறும்போது, அல்லது component definitions-ஐ nest செய்தால் (இது React-இல் அனுமதிக்கப்படாது; ஒவ்வொரு render-க்கும் “inner” component remount ஆகும்) இது நடக்கலாம்.
எனக்கு error வருகிறது: “A component is changing an uncontrolled input to be controlled”
Component-க்கு value வழங்கினால், அது அதன் lifetime முழுவதும் string ஆகவே இருக்க வேண்டும்.
முதலில் value={undefined} அனுப்பி, பின்னர் value="some string" அனுப்ப முடியாது; ஏனெனில் component uncontrolled ஆக இருக்க வேண்டுமா அல்லது controlled ஆக இருக்க வேண்டுமா என்பதை React அறியாது. Controlled component எப்போதும் string value பெற வேண்டும்; null அல்லது undefined அல்ல.
உங்கள் value API அல்லது state variable-இலிருந்து வந்தால், அது null அல்லது undefined ஆக initialized ஆகியிருக்கலாம். அப்படியானால், முதலில் அதை empty string ('') ஆக அமைக்கவும், அல்லது value string என்பதை உறுதிசெய்ய value={someValue ?? ''} அனுப்பவும்.