Załóżmy, że mam ciąg tekstowy zawierający znaki końca wiersza i renderuję go w następujący sposób:
render() {
var text = "One\nTwo\nThree";
return <div>{text}</div>;
}
W HTML znaki końca linii nie są renderowane jako znaki końca linii. Jak mam to zrobić w React? Nie chcę konwertować na <br>
tagi i używać dangerouslySetInnerHTML
. Czy jest inny sposób?
<br>
, może to być problem. Zauważyłem, że JS Transformer nie lubi tego, chyba że używasz wersji<br/>
HTML 4.Odpowiedzi:
Możesz spróbować umieścić elementy div dla każdej linii
render() { return (<div> <div>{"One"}</div> <div>{"Two"}</div> <div>{"Three"}</div> </div>); }
Lub
render() { var text = "One\nTwo\nThree"; return ( <div> {text.split("\n").map((i,key) => { return <div key={key}>{i}</div>; })} </div>); }
źródło
<MultilineText>
komponent!<div>
formatować linie tekstu?<p>
wydaje się bardziej poprawna semantycznie.Utwórz nową klasę CSS
Wyświetl swój tekst z tą klasą CSS
render() { const text = 'One \n Two \n Three'; return ( <div className="display-linebreak"> {text} </div> ); }
Renderuje ze znakami końca linii (sekwencje białych znaków zostaną zwinięte w jedną białą spację. W razie potrzeby tekst będzie zawijany). Lubię to:
Możesz również rozważyć wstępne zawijanie. Więcej informacji tutaj ( właściwość odstępu CSS ).
źródło
Możesz użyć właściwości CSS „white-space: pre”. Myślę, że to najłatwiejszy sposób radzenia sobie z tym.
źródło
white-space:pre
miał taki sam efekt jakwhite-space:nowrap
u mnie, tzn. tekst przepełnił swoje opakowanie. Użyciewhite-space:pre-wrap
zamiast tego rozwiązało ten problem.white-space: pre-line;
zamiast tego.Tutaj najczystsze rozwiązanie (afaik):
render(){ return <pre> Line 1{"\n"} Line 2{"\n"} Line 3{"\n"} </pre> }
Zamiast you możesz również użyć
<div style={{whiteSpace:"pre"}}>
lub dowolnego innego elementu bloku html (takiego jakspan
lubp
z tym atrybutem stylu)źródło
Spróbuj tego,
render() { var text = "One\nTwo\nThree"; return <div style={{whiteSpace: 'pre-line'}}>{text}</div>; }
źródło
Renderuj rozdzielony tekst „Moja linia pierwsza \ nMoja druga linia \ nWhatvs ...” w normalnym obszarze tekstowym HTML. Wiem, że to działa, ponieważ właśnie go dzisiaj użyłem! Spraw, aby obszar tekstu był czytany tylko wtedy, gdy musisz, i stosownie do niego styl.
źródło
Możesz użyć
-webkit-user-modify: read-write-plaintext-only;
w swoim div. Na przykład sformatuje i zrozumie takie rzeczy, jak \ n i \ p.źródło
Możesz skorzystać z tagu textarea w html, później możesz dodać styl do tagu textarea. Prawie rozwiązuje wszystkie problemy, w tym podziały wierszy i spacje tabulatorów. Cheerzz ...
np .: Twój render będzie wyglądał jak poniżej
render() { var text = "One\nTwo\nThree"; return <textarea>{text}</textarea>; }
Wynik:
źródło
Możesz bezpiecznie uruchomić
String.raw
zamiast tego dla tego typu wartości.const text = String.raw`One Two Three `
render() { return <div style={{ whiteSpace: "pre" }}>{text}</div> }
Możesz także po prostu użyć
<pre>
tagu, który skutecznie robi to samo, ale jest mniej semantycznie jasny, jeśli używasz go już do innych celów w swojej aplikacji.źródło
<div style={{ whiteSpace: "break-spaces" }}> {JSON.stringify(state, null, " ")} </div>
źródło