How to use whiteSpace: 'pre-wrap' on React

前端 未结 2 744
滥情空心
滥情空心 2021-02-13 17:22

How can I use the style whiteSpace: \'pre-wrap\' on React

I have a div that need to render the text using the format with spaces

render() {
   
相关标签:
2条回答
  • 2021-02-13 17:29

    JSX collapses whitespaces, in this case you can use dangerouslySetInnerHTML like so

    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() } 
        />
      }
    });
    

    Note: For new versions of React/JSX, there is no need to use 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>

    0 讨论(0)
  • 2021-02-13 17:49

    You can use dangerouslySetInnerHTML but this is, well, dangerous. :) What else you can do, which is what we do in our app, is convert the string to React elements, for example to render line-breaks:

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

    You can make this into a function or a component like <MultilineText text={text}/>.

    Example on CodePen.

    In our case we also tried using whiteSpace and found that none of the options quite gave us what we wanted.

    0 讨论(0)
提交回复
热议问题