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() {
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>
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.