Textarea

Renders textarea with optional autosize variant
Import

Usage

Use TextInput when you need to capture large amounts of text from user. Component supports all props from Input and InputWrapper components:

Radius
Size
<Textarea
placeholder="Your comment"
label="Your comment"
required
/>

Autosize

Autosize textarea uses react-textarea-autosize package. The height will grow until maxRows are reached or indefinitely if maxRows not set.

<Textarea
placeholder="Autosize with no rows limit"
label="Autosize with no rows limit"
autosize
minRows={2}
/>
<Textarea
label="Autosize with 4 rows max"
placeholder="Autosize with 4 rows max"
autosize
minRows={2}
maxRows={4}
/>

Controlled

import { useState } from 'react';
import { Textarea } from '@mantine/core';
function Demo() {
const [value, setValue] = useState('');
return <Textarea value={value} onChange={(event) => setValue(event.currentTarget.value)} />;
}

Invalid state and error

Comment should not include bad words
// Error as boolean – red border color
<Textarea error />
// Error as React node – red border color and message below input
<Textarea error="Comment should not include bad words" />

Get element ref

You can get input ref with elementRef prop:

import { useRef } from 'react';
import { Textarea } from '@mantine/core';
function Demo() {
const ref = useRef(null);
return <Textarea elementRef={ref} />;
}

Server side rendering

Component uses use-id hook to generate unique ids and aria- attributes, provide static id prop to prevent props mismatch:

<Textarea /> // -> random id generated both on client and server, props mismatch warning
<Textarea id="my-textarea" /> // -> id is static, no mismatches

Accessibility

Provide aria-label in case you use component without label for screen reader support:

<Textarea label="My textarea" />; // -> ok, textarea and label is connected
<Textarea />; // not ok, textarea is not labeled
<Textarea aria-label="My textarea" />; // -> ok, label is not visible but will be announced by screen reader
Build fully functional accessible web applications with ease
Feedback
Your feedback is most valuable contribution to the project, please share how you use Mantine, what features are missing and what is done good
Leave feedback