为了确保在 React 输入框中输入的空格样式和输入后页面显示一致,你可以使用 CSS 的 white-space 属性来控制空格的显示。具体来说,可以使用 pre-wrap 值来保留空格和换行符。
- import React, { useState, useEffect, useRef } from 'react';
- import './App.css';
-
- const App = () => {
- const [text, setText] = useState('');
- const textareaRef = useRef(null);
-
- useEffect(() => {
- const textarea = textareaRef.current;
- // 重置高度,防止高度累积
- textarea.style.height = 'auto';
- // 设置高度为内容的高度
- textarea.style.height = `${textarea.scrollHeight}px`;
- }, [text]);
-
- const handleChange = (event) => {
- setText(event.target.value);
- };
-
- return (
- <div className="container">
- <textarea
- id="dynamic-textarea"
- ref={textareaRef}
- value={text}
- onChange={handleChange}
- placeholder="请输入文字..."
- />
- <div className="display-text">{text}div>
- div>
- );
- };
-
- export default App;
- .container {
- width: 300px;
- margin: 50px auto;
- }
-
- #dynamic-textarea {
- width: 100%;
- min-height: 50px;
- max-height: 150px; /* 设置最大高度 */
- overflow-y: auto; /* 当内容超过最大高度时显示滚动条 */
- padding: 10px;
- box-sizing: border-box;
- font-size: 16px;
- line-height: 1.5;
- resize: none; /* 禁止用户手动调整大小 */
- border: 1px solid #ccc;
- border-radius: 4px;
- }
-
- .display-text {
- white-space: pre-wrap; /* 保留空格和换行符 */
- padding: 10px;
- margin-top: 20px;
- border: 1px solid #ccc;
- border-radius: 4px;
- background-color: #f9f9f9;
- font-size: 16px;
- line-height: 1.5;
- }
React 组件:
useState 来管理输入框的内容。useRef 来获取 textarea 的 DOM 节点。useEffect 来监听 text 状态的变化,每次输入内容时动态调整输入框的高度。handleChange 函数用于更新 text 状态。CSS 部分:
#dynamic-textarea:设置输入框的最小高度(min-height)和最大高度(max-height)。当内容超过最大高度时,使用 overflow-y: auto 显示垂直滚动条。resize: none:禁止用户手动调整输入框的大小。white-space: pre-wrap:在 .display-text 类中使用 white-space: pre-wrap 来保留空格和换行符,使输入框中的内容和显示的内容样式一致。动态调整高度:
useEffect 中,每次 text 状态变化时,重置输入框的高度为 auto,然后将高度设置为内容的实际高度(scrollHeight)。