Renders a textarea component with a character limit.
- Use the
React.useState()hook to create thecontentstate variable and set its value tovalue.
Create a methodsetFormattedContent, which trims the content of the input if it’s longer thanlimit. - Use the
React.useEffect()hook to call thesetFormattedContentmethod on the value of thecontentstate variable. - Use a
<div>to wrap both the<textarea>and the<p>element that displays the character count and bind theonChangeevent of the<textarea>to callsetFormattedContentwith the value ofevent.target.value.
代码实现
function LimitedTextarea({ rows, cols, value, limit }) {
const [content, setContent] = React.useState(value);
const setFormattedContent = text => {
text.length > limit ? setContent(text.slice(0, limit)) : setContent(text);
};
React.useEffect(() => {
setFormattedContent(content);
}, []);
return (
<div>
<textarea
rows={rows}
cols={cols}
onChange={event => setFormattedContent(event.target.value)}
value={content}
/>
<p>
{content.length}/{limit}
</p>
</div>
);
}
使用样例
ReactDOM.render(<LimitedTextarea limit={32} value="Hello!" />, document.getElementById('root'));