我想要以相同格式在 TextArea 中输入的文本

I want the text that is input in TextArea in same format

我用的是AntDesign的TextArea,当我在里面输入,比方说,2-3个段落,回车显示一行,但是它在一个段落中显示所有内容。我想要我在文本区域中输入时所做的确切格式。怎么做?

我只是简单地使用文本区域 -

  <TextArea
     rows={2}
     style={{ width: "100%" }}
     defaultValue={this.state.value}
     onClick={this.handleValue}
  />

并显示在右侧-

  <div>{this.state.value}</div>

预计

Hey, how are you doing today? I am fine. i hope your are fine

do give me a call when you are free.

contact - 1234567890

我得到了什么结果

Hey, how are you doing today? I am fine. i hope your are fine do give me a call when you are free. contact - 1234567890

所以我不认为有一个简单的方法来做到这一点(即使这样做的方法不是那么难)。

你需要做的是获取 TextArea 的每一行,你应该可以通过这样的方式获取它:

var textArea = document.getElementById("my-text-area");
var arrayOfLines = textArea.value.split("\n");

来源:

一旦你有了 arrayOfLines,你就可以输出文本,就像用 for() 循环输入一样。

我认为问题出在style={{ width: "100%" }}。尝试限制 TextAreas 宽度。例如:style={{ width: "100px" }}

您可以使用 pre 标签来显示输入的内容。

我使用 vanilla JS 创建了以下示例。您可以在 react.

中实现相同的功能

<textarea id="tarea" rows="2" style="width: 100%" onclick="handleValue()">
</textarea>
<p id="display"></p>
<script>
  function handleValue() {
    var tarea = document.getElementById('tarea');
    var disp = document.getElementById('display');
    disp.innerHTML = '<pre>' + tarea.value + '</pre>';
  }
</script>

例如:

<pre>{this.state.value}</pre> 应该可以解决问题。

希望对您有所帮助!干杯。

下面提供了此任务的两个选项:

  1. 在按键 "Enter" 上,向该行附加一个换行符。显示文本时,在换行处拆分。 CodeSandbox example, listen for keycode
function App() {
  const [text, setText] = React.useState("");

  function handleChange(e) {
    if (e.key === "Enter") {
      setText(`${e.target.value}\n`);
    }
    setText(e.target.value);
  }

  return (
    <div>
      <TextArea
        rows={4}
        value={text}
        onChange={handleChange}
        onPressEnter={handleChange}
      />

      {text.length > 0 && text.split("\n").map((l, i) => <p key={i}>{l}</p>)}
    </div>
  );
}
  1. 使用 pre HTML 标签。这很简单,但是它默认将文本呈现为等宽字体。 CodeSandbox example, using pre tag
function App() {
  const [text, setText] = React.useState("");

  function handleChange(e) {
    setText(e.target.value);
  }

  return (
    <div>
      <TextArea
        rows={4}
        value={text}
        onChange={handleChange}
        onPressEnter={handleChange}
      />

      <pre>{text}</pre>
    </div>
  );
}

正如 AdityaSrivast 所说,您可以使用前置标签。但是要包装文本,您应该在 CSS.

下面添加
<style>
     pre {
        overflow-x: auto;
        white-space: pre-wrap;
        white-space: -moz-pre-wrap;
        white-space: -pre-wrap;
        white-space: -o-pre-wrap;
        word-wrap: break-word;
     }
  </style>

否则,文本将显示为一行。