You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何实现自动换行、随内容增高且最多5行出现滚动条的textarea输入框

实现方案

1. 修改styled组件样式

先调整textarea的基础样式,替换原来的固定高度配置,增加最大高度限制和滚动规则:

const Input = styled.textarea`
  /* 新增:避免padding撑高元素,保证高度计算准确 */
  box-sizing: border-box;
  border: 0;
  outline: none;
  padding: 5px 10px;
  border-radius: 20px;
  font-size: 14px;
  /* 新增:固定行高,方便计算行数对应高度 */
  line-height: 24px;
  width: 100%;
  overflow-wrap: break-word;
  /* 替换原来的固定height:最小高度为1行高度 */
  min-height: 24px;
  /* 新增:最大高度为5行高度 24px*5 */
  max-height: 120px;
  /* 新增:超出最大高度时自动显示滚动条 */
  overflow-y: auto;
  /* 新增:禁止用户拖拽修改输入框大小 */
  resize: none;
`;

2. 增加输入监听逻辑实现高度自适应

仅靠样式无法实现随内容自动增高,需要通过JS监听输入事件动态调整高度,React中实现示例如下:

import { useRef } from 'react';

const ChatInput = () => {
  const inputRef = useRef(null);

  const handleInput = () => {
    const textarea = inputRef.current;
    // 先重置为最小高度,保证删除内容时高度能自动回缩
    textarea.style.height = '24px';
    // 调整高度为内容实际高度
    textarea.style.height = `${textarea.scrollHeight}px`;
  };

  return <Input ref={inputRef} onInput={handleInput} />
}

效果说明

输入内容不足5行时,输入框高度会跟随内容行数自动增高;内容超过5行时,输入框高度固定为120px,自动出现纵向滚动条,完全符合需求。

内容的提问来源于stack exchange,提问作者some nooby questions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:15:04