Ответ 1
У вас есть несколько вариантов:
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) Используйте диапазон с элементом br
:
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 с данными, вы можете использовать dangerouslySetInnerHTML
с" br 'для каждой строки:
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, но за счет потенциально опасной безопасности веб-страницы/пользователя. Я бы не использовал этот, если другие работают на вас.