如何使用whiteSpace:在React上'预先包装'

时间:2016-04-02 18:43:35

标签: css reactjs whitespace react-jsx jsx

如何在反应

上使用whiteSpace样式:'pre-wrap'

我有一个div需要使用带空格的格式呈现文本

render() {
   <div style={{whiteSpace: 'pre-wrap'}}
      keep formatting

      keep spaces
   </div>
}

2 个答案:

答案 0 :(得分:9)

JSX折叠空格,在这种情况下,您可以像dangerouslySetInnerHTML一样使用

var Component = React.createClass({
  content() {
    const text = `
      keep formatting

      keep spaces
   `;

    return { __html: text };
  },

  render: function() {
    return <div 
      style={{ whiteSpace: 'pre-wrap' }} 
      dangerouslySetInnerHTML={ this.content() } 
    />
  }
});

注意:对于新版本的React / JSX,无需使用dangerouslySetInnerHTML

const App = () => (
  <div style={{ whiteSpace: 'pre-wrap' }}>
    {`
      keep formatting

      keep spaces


      keep spaces
   `}
  </div>
);

ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

答案 1 :(得分:-1)

您可以使用dangerouslySetInnerHTML,但这很危险。 :)你还可以做什么,我们在应用程序中做的是将字符串转换为React元素,例如渲染换行符:

text.split("\n").map((text, i) => i ? [<br/>, text] : text)

您可以将其转换为<MultilineText text={text}/>之类的函数或组件。

Example on CodePen

在我们的案例中,我们也尝试使用whiteSpace,发现没有一个选项能够完全满足我们的需要。