구분되지 않는 공백이있는 ReactJS 렌더링 문자열


87

&와 같은 문자를 포함 할 수있는 문자열이있는 소품이 있습니다. 공백도 포함됩니다. 모든 공백을  .

쉽게 할 수있는 방법이 있습니까? 이 구문을 사용하여 렌더링 할 수는 없습니다.

<div dangerouslySetInnerHTML={{__html: myValue}} />

먼저 HTML 엔티티를 마크 업으로 바꿔야하기 때문입니다. 나는 이것을하고 싶지 않다. 너무 낮은 수준 인 것 같다.

내가 할 수있는 방법이 있습니까?


1
왜 이것이 반응과 관련이 있습니까?
Marcelo Bezerra 2014-06-26

1
당신이 무엇을하고 싶은지 완전히 명확하지 않습니다. 당신이 하시겠습니까 단지 모든 공백을 대체 &nbspl;당신은 말 그대로 표시 HTML 태그를 원하거나 뭔가 당신이 원하는 다른 것입니다합니까?
Bojangles

언제 myValue 액세스 할 수 있는지에 따라 다릅니다 . 적절한 수명주기 함수에서 기다렸다가 구문 분석하고 parsed다중 구문 분석을 방지 하는 플래그를 설정할 수 있습니다.
David Hellsing 2014-06-26

렌더링하려는 경우 & nbsp; 반응으로 dom에 이스케이프되지 않은 경우 dangerouslySetInnerHTML메서드 를 사용해야합니다 . javascript를 사용하여 공백을 & nbsp;로 대체하는 문자열을 만들 수 있기 때문에 그 문제를 해결할 방법을 찾지 못했습니다. 그러나 dangerouslySetInnerHTML메소드 를 사용하지 않으면 반응에 의해 이스케이프됩니다.
Mike Driver

답변:


233

&nbsp;HTML 엔티티 를 사용하는 대신 &nbsp;(U + 00A0 NON-BREAKING SPACE) 를 참조 하는 유니 코드 문자를 사용할 수 있습니다 .

<div>{myValue.replace(/ /g, "\u00a0")}</div>

3
위에서 사용중인 유니 코드 문자는 피싱 스킴에 의한 남용으로 인해 브라우저에서 블랙리스트에 올랐습니다. 참조 kb.mozillazine.org/Network.IDN.blacklist_chars을
페리 튜에게

2
@BenAlpert 좋은 지적입니다. 예. 아주 좋은 지적입니다. 내 지식에 IDN 주소 만 있습니다.
Perry Tew

간단하면서도 효과적입니다. 3 년의 포스트 이후에도 @BenAplert를 만나보세요.
YASH DAVE

이것은 아무것도 할 때 나를 위해 일했습니다. 도와 주셔서 감사합니다!
davidawad 19

2
이 블랙리스트는 HTML 코드가 아닌 도메인 이름에 적용됩니다.
JW.

34

나는 이것이 오래된 질문이라는 것을 알고 있으며 이것은 당신이 요청한 것을 정확히 수행하지는 않지만 문자열을 편집하는 대신 CSS white-space: nowrap속성을 사용하여 달성하려는 것이 더 잘 해결 될 수 있습니다 .

HTML에서 :

<div style="white-space: nowrap">This won't break lines</div>

반응 :

<div style={{ whiteSpace: 'nowrap' }}>{myValue}</div>

감사합니다! 이것이 더 나은 대답입니다. 그리고 제 경우에는 (줄 바꿈을 원하지 않지만 한 줄로도 원하지 않는 많은 링크), 다음을 추가했습니다 : a :: after {content : ''; white-space : normal}
chad steele

0

예쁜 xml을 표시하려면 다음을 수행하십시오.

var str = "<test>\n\t\t<value>1</value>\n</test>\n".replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\t/g, "\u00a0").replace(/\n/g, '<br/>');
return (
    <div dangerouslySetInnerHTML={{__html: str}} ></div>
)

0

사라지지 않고 여기에 입력하기가 매우 어렵 기 때문에 모든 사람이 볼 수 있도록 약간의 공백을 추가합니다. 이 태그 <nbsp />에서 공백을 제거하면 React에서 끊기지 않는 공백을 사용할 수 있습니다.

React는이 JSX 태그를 비 분리 공백으로 변환합니다. 특이한 점 : 간격을 두려는 텍스트와 같은 줄에 사용해야합니다. 또한이 태그가있는 비 분리 공백은 React에 쌓이지 않습니다.


작동하지 않습니다 :Warning: The tag <nbsp> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter
Ross Attrill

0

문자열 사이의 공백을 제거하려면 아래 코드가 저에게 효과적입니다. 예 : "afee dd"결과 : "afeedd"

{myValue.replace (/ \ s + / g, '')}

-4

따라서이 "Hello world"와 같은 값이 있고 this.props.value.

다음과 같이 할 수 있습니다.

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}>&nbsp;</span>);
}

// remove the trailing nbsp
array.pop();

return <div>{array}</div>;

jsbin

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.