Mam kilka właściwości, które mają ciąg znaków, który może zawierać znaki, takie jak &. Zawiera również spacje. Chcę zamienić wszystkie spacje na
.
Czy mogę to zrobić w łatwy sposób? Pamiętaj, że nie mogę po prostu renderować przy użyciu tej składni:
<div dangerouslySetInnerHTML={{__html: myValue}} />
ponieważ najpierw musiałbym zamienić wszystkie encje HTML na ich znaczniki. Nie chcę tego robić, wydaje mi się, że poziom jest zbyt niski.
Czy jest sposób, w jaki mogę to zrobić?
 l;
, chcesz dosłownie wyświetlać tagi HTML, czy jest coś innego, co chcesz zrobić?myValue
jest dostępny. Możesz poczekać na to w odpowiedniej funkcji cyklu życia, przeanalizować go i ustawićparsed
flagę, która zapobiega wielokrotnemu analizowaniu.dangerouslySetInnerHTML
metody. Naprawdę nie widzę sposobu na obejście tego problemu, ponieważ możesz użyć javascript do utworzenia ciągu znaków zastępującego spacje przez & nbsp; ale bez użyciadangerouslySetInnerHTML
metody zostaną one omówione przez reakcję.Odpowiedzi:
Zamiast używać
encji HTML, możesz użyć znaku Unicode, który
odnosi się do (U + 00A0 SPACJA NIEŁAMANA):<div>{myValue.replace(/ /g, "\u00a0")}</div>
źródło
Wiem, że to stare pytanie i nie robi to dokładnie tego, o co prosiłeś, ale zamiast edytować ciąg, to, co chcesz osiągnąć, prawdopodobnie lepiej rozwiązuje się za pomocą
white-space: nowrap
atrybutu CSS :W html:
<div style="white-space: nowrap">This won't break lines</div>
W odpowiedzi:
<div style={{ whiteSpace: 'nowrap' }}>{myValue}</div>
źródło
Jeśli chcesz wyświetlić ładny XML:
var str = "<test>\n\t\t<value>1</value>\n</test>\n".replace(/</g, '<').replace(/>/g, '>').replace(/\t/g, "\u00a0").replace(/\n/g, '<br/>'); return ( <div dangerouslySetInnerHTML={{__html: str}} ></div> )
źródło
Cóż, bardzo trudno jest tu pisać bez znikania, więc dodaję małą spację, aby wszyscy mogli to zobaczyć. Jeśli usuniesz białe znaki z tego tagu <nbsp />, będziesz mógł użyć nierozdzielającej spacji w Reakcie.
React tłumaczy ten tag JSX na nierozerwalną przestrzeń. Dziwne dziwactwo: należy go również użyć w tym samym wierszu, co tekst, który chcesz wstawić. Ponadto nierozdzielające spacje z tym tagiem nie kumulują się w Reakcie.
źródło
Warning: The tag <nbsp> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter
Aby usunąć spację między ciągiem, poniższy kod działa dla mnie. np .: „afee dd”, wynik: „afeedd”
{myValue.replace (/ \ s + / g, '')}źródło
Masz więc wartość taką jak „Witaj, świecie” i powiemy, że jest w środku
this.props.value
.Możesz to zrobić:
var parts = this.props.value.split(" "), array = []; for (var i=0; i<parts.length; i++){ // add the string array.push(<span key={i * 2}>{parts[i]}</span>); // add the nbsp array.push(<span key={i * 2 + 1}> </span>); } // remove the trailing nbsp array.pop(); return <div>{array}</div>;
jsbin
źródło