当前位置: 首页 > 知识库问答 >
问题:

换行符被jsx表忽略

鲜于海
2023-03-14

我试图用多行字符串创建一个表,但我的表没有正确设置字符串的格式。以下是jsx:

<td>
  {arr.join('\n')}
</td>

下面是相应的html:

<td data-reactid=".xyz">Line 1
Line 2
Line 3
Line 4</td>

但在浏览器中它看起来像:

发生了什么,如何让我的换行符出现?

共有3个答案

公西嘉玉
2023-03-14

当您确实需要时,请在JSX中使用{n}。

薛宇
2023-03-14

你有几个选择:

1) 使用块级元素,例如div或p,并将每行换行。

var TextLines = React.createClass({      
    render: function() {
        var lines = this.props.lines;

        var formatted = lines.map(function(line) {
            return (<p>{line}</p>);
        });
        return (<div>{ formatted }</div>);
    }
});

var lines = ['line 1', 'line 2', 'line 3'];
React.render(<TextLines lines={ lines }/>, 
              document.getElementById('container'));

2) 将跨度与元素一起使用:

var TextLines = React.createClass({      
    render: function() {
        var lines = this.props.lines;

        var br = lines.map(function(line) {
            return (<span>{line}<br/></span>);
        });
        return (<div>{ br }</div>);
    }
});

var lines = ['line 1', 'line 2', 'line 3'];
React.render(<TextLines lines={ lines } />,  
              document.getElementById('container'));

3) 如果您确定数据不会受到XSS/hacks的威胁,您可以使用带有“br”的危险HTML:

var TextLines = React.createClass({      
    render: function() {
        var lines = this.props.lines;
        var content = {
            __html: lines.join('<br />')
        };     
        return (<div dangerouslySetInnerHTML={ content } />);
    }
});

var lines = ['line 1', 'line 2', 'line 3'];
React.render(<TextLines lines={ lines } />, 
             document.getElementById('container'));

最后一种方法生成的HTML最少,但代价是网页/用户的安全性存在潜在风险。如果其他人为你工作,我不会用这个。

史默
2023-03-14

尝试空白:pre 或<代码>空白:预换行 (谢谢,@Mirage)以您手机的风格。

td {
  width: 150px;
}

.nopre {
  background-color: lightblue;
}

.withpre {
  background-color: lightgreen;
  white-space: pre;
}

.withprewrap {
  background-color: orange;
  white-space: pre-wrap;
}
html prettyprint-override"><table><tr>

<td class="nopre">Line A
Line B
Line C
This is a cell with no whitespace setting</td>

</tr></table><table><tr>

<td class="withpre">Line 1
Line 2
Line 3
This is a cell with white-space: pre</td>

</tr></table><table><tr>
  
<td class="withprewrap">Line 1
Line 2
Line 3
This is a cell with white-space: pre-wrap</td>
  
</tr></table>
 类似资料:
  • 当我将jasper报表导出到CSV文件时,如果一个文本字段包含新的行字符,CSV中的记录将用两行表示,而不是一行。在jasper报告中有什么设置可以忽略文本字段中出现的新行字符吗?我们使用iReport来设计jasper报表。任何形式的帮助都是感激的。谢谢

  • 当我执行“重新格式化代码”时,我的多行JSX组件会像这样缩进: 然后他们有一个ESLint错误,例如ESLint:预期缩进10个空格,但找到19个。(缩进) 当我右键单击并执行ESLint修复时,我得到了这个,ESLint对此很满意: 但这是站不住脚的,因为“重新格式化代码”给出了错误的缩进,尤其是因为我在提交时运行了重新格式化代码!所以结果总是错的! 我确实在.eslintrc中使用了“应用ES

  • 我的文件似乎被Git忽略了-文件是否已损坏?Git期望哪种文件格式、区域设置或区域性? 我的: 的输出: 我希望和不出现在“未跟踪文件”列表中。 我应该从哪里开始寻找解决这个问题?

  • 我有以下控制器: 我启用了Spring Actuctor的endpoint,甚至可以看到被忽略的endpoint是可用的: 编辑我添加了一个拦截器,使我能够查看目标将是什么。 是正确的: 对于并不期望参数,但spring仍然因此抛出错误这一事实,我无法全神贯注。