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

React中实现每60字符自动插入换行时\n不生效问题求解

问题原因
  • 核心原因:HTML默认会将连续空白字符(包括换行符\n、空格、制表符等)合并为单个空格显示,因此插入的\n不会被浏览器识别为换行标识。
  • 附带问题:原countStr函数存在逻辑错误:循环判断条件写为i<str.length,但接收的参数为str1,且循环结束后最后一段不足60字符的内容没有被拼接进返回结果中。
解决方案

方案1:CSS属性适配(最推荐,无需修改业务逻辑)

给包裹文本的<p>标签添加white-space: pre-wrap属性即可让浏览器正常识别\n作为换行标识,同时保留自动折行特性,不会破坏原有布局:

.about p {
  white-space: pre-wrap;
}

方案2:替换换行符为
标签渲染

如果不需要修改CSS,可以将\n替换为HTML换行标签<br />后再渲染,分为两种实现方式:

2.1 可控内容直接渲染

如果处理的字符串为完全可控的内部内容,无用户输入风险,可使用dangerouslySetInnerHTML渲染:

// 修正后的字符串处理函数
function countStr (str1){
  if (!str1) return ''
  let str2 = ""
  for(let i = 0; i < str1.length; i += 60){
    str2 += str1.substring(i, i + 60) + "\n"
  }
  return str2
}

const About = () =>{
  // 此处替换为你的原始字符串处理逻辑
  const originStr = "需要处理的长文本内容"
  const changedStr = countStr(originStr)
  const renderHtml = changedStr.replace(/\n/g, '<br />')
  return(
    <div className="about">
      <h2>I'm Gal</h2>
      <p dangerouslySetInnerHTML={{__html: renderHtml}} />
    </div>
  )
}
export default About

2.2 存在用户输入的安全实现

如果处理的字符串包含用户输入内容,为避免XSS风险,可将处理后的字符串按\n切割为数组后遍历渲染:

const About = () =>{
  const originStr = "需要处理的长文本内容"
  const changedStr = countStr(originStr)
  const strSegmentList = changedStr.split('\n')
  return(
    <div className="about">
      <h2>I'm Gal</h2>
      <p>
        {strSegmentList.map((segment, index) => (
          <React.Fragment key={index}>
            {segment}
            {index !== strSegmentList.length - 1 && <br />}
          </React.Fragment>
        ))}
      </p>
    </div>
  )
}

内容的提问来源于stack exchange,提问作者Gal Zaken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:02