반응에서 여러 줄 텍스트 문자열을 렌더링하는 방법
줄 바꿈을 포함하는 텍스트 문자열이 있으며 다음과 같이 렌더링한다고 가정합니다.
render() {
var text = "One\nTwo\nThree";
return <div>{text}</div>;
}
HTML에서는 줄 바꿈은 줄 바꿈으로 렌더링되지 않습니다.리액트에서는 어떻게 해야 돼요?변환하고 싶지 않다<br>
태그 및 사용dangerouslySetInnerHTML
.다른 방법이 없나요?
새로운 CSS 클래스 만들기
.display-linebreak {
white-space: pre-line;
}
해당 CSS 클래스로 텍스트를 표시합니다.
render() {
const text = 'One \n Two \n Three';
return (
<div className="display-linebreak">
{text}
</div>
);
}
줄 바꿈을 사용하여 렌더링합니다(공백 시퀀스는 단일 공백으로 축소됩니다).텍스트는 필요에 따라 줄 바꿈됩니다).다음과 같이 합니다.
One
Two
Three
또한 사전 포장을 고려할 수도 있습니다.자세한 내용은 여기를 참조하십시오(CSS 공백 속성).
각 행마다 디브(div)를 넣을 수 있습니다.
render() {
return (<div>
<div>{"One"}</div>
<div>{"Two"}</div>
<div>{"Three"}</div>
</div>);
}
또는
render() {
var text = "One\nTwo\nThree";
return (
<div>
{text.split("\n").map((i,key) => {
return <div key={key}>{i}</div>;
})}
</div>);
}
CSS 속성 "white-space: pre" 를 사용할 수 있습니다.이게 가장 쉬운 방법인 것 같아요.
이거 드셔보세요.
render() {
var text = "One\nTwo\nThree";
return <div style={{whiteSpace: 'pre-line'}}>{text}</div>;
}
가장 깨끗한 솔루션(afik):
render(){
return <pre>
Line 1{"\n"}
Line 2{"\n"}
Line 3{"\n"}
</pre>
}
대신,<div style={{whiteSpace:"pre"}}>
또는 기타 html 블록 요소(예:span
또는p
이 스타일 속성 포함)
사용할 수 있습니다.-webkit-user-modify: read-write-plaintext-only;
당신의 div에.예를 들어 \n 및 \p 등의 형식을 지정하고 이를 이해합니다.
html의 텍스트 영역 태그를 사용할 수 있으며 나중에 텍스트 영역 태그에 스타일을 추가할 수 있습니다.줄 바꿈이나 탭 공간 등 모든 문제를 거의 해결합니다.치어리더...
예: 렌더링은 다음과 같습니다.
render() {
var text = "One\nTwo\nThree";
return <textarea>{text}</textarea>;
}
출력:
One
Two
Three
안전하게 달릴 수 있습니다.String.raw
대신 이 유형의 값을 지정합니다.
const text = String.raw`One
Two
Three
`
render() {
return <div style={{ whiteSpace: "pre" }}>{text}</div>
}
또 다른 방법은<pre>
태그는 같은 작업을 효과적으로 수행하지만 앱에서 이미 다른 목적으로 사용하고 있다면 의미론적으로 명확하지 않습니다.
<div style={{ whiteSpace: "break-spaces" }}> {JSON.stringify(state, null, " ")} </div>
패키지 이름 전용을 사용하여 여러 줄의 텍스트를 렌더링할 수 있습니다.
const multilineText = `
This is line 1
This is line 2
This is line 3
`;
export default function App() {
return (
<>
<div style={{ whiteSpace: "pre-wrap" }}>{dedent(multilineText)}</div>
</>
);
}
델은,<br/>
TypeScript 프로젝트에서 다음과 같은 간단한 함수 컴포넌트를 사용하고 있습니다.
import React, { FunctionComponent } from "react"
export const Multiline: FunctionComponent<{ text: string }> = ({ text }) => (
<>
{text.split(/\n|\r\n/).map((segment, index) => (
<>
{index > 0 && <br />}
{segment}
</>
))}
</>
)
구분 텍스트 "My line one\nMy second line\nWhatevs"를 렌더링합니다."를 클릭합니다.오늘 막 사용했기 때문에 작동한다는 것을 알고 있습니다! 텍스트 영역을 필요한 경우에만 읽기 전용으로 만들고 그에 맞게 스타일링하십시오.
이 예에서는 react.displays 컴포넌트,
( map , split )를 사용하여 각 행을 새로운 div 요소에 삽입합니다.이것은 ltr/rtl 스타일의 컴포넌트를 동시에 지원하는 코멘트나 코멘트의 좋은 예입니다.다음은 간단한 예입니다.
<div>
{ ' this is first line \n this is second line \n this is third line '.split('\n').map( line =>
<div key={ Math.random() * 10} dir="auto" style={{ textAlign: 'start'}}> {line} </div>
)}
</div>
또한 문자열 데이터가 API/react 상태에서 변환되는 경우 문자열 변수 이름을 다음과 같이 사용할 수 있습니다.
<div>
{ post_comments.split('\n').map( line =>
<div key={ Math.random() * 10} dir="auto" style={{textAlign: 'start'}}> {line} </div>
)}
</div>
이것은 단순한 예이며, 케이스/요건에 따라 변경해 주세요.
그리고 당신이 원한다면 당신의 요청에 따라 div 태그를 p 태그로 대체할 수 있습니다.
나는 이것이 너에게 도움이 되길 바란다.
언급URL : https://stackoverflow.com/questions/35351706/how-to-render-a-multi-line-text-string-in-react
'programing' 카테고리의 다른 글
공백 문자는 JSON에서 중요하지 않습니까? (0) | 2023.03.13 |
---|---|
React Router 4에서 인증된 루트를 구현하려면 어떻게 해야 합니까? (0) | 2023.03.13 |
React.createElement' children 파라미터 사용방법(jsx 없음) (0) | 2023.03.08 |
AngularJS - ng-repeat에 의해 생성된 라디오 버튼 선택 시 모델이 업데이트되지 않음 (0) | 2023.03.08 |
phpmyadmin에서 필드를 열면 mySQL 데이터베이스가 변경되지만 변경되지 않습니다. (0) | 2023.03.08 |