리액트를 사용한 예쁜 JSON 인쇄
저는 React JS를 사용하고 있는데, 앱의 일부는 꽤 인쇄된 JSON이 필요합니다.
다음과 같은 JSON이 있습니다.{ "foo": 1, "bar": 2 }
그리고 만약 내가 그걸 훑어본다면JSON.stringify(obj, null, 4)
브라우저 콘솔에서는 인쇄가 잘 됩니다만, 이 리액션 스니펫에서 사용하면 다음과 같습니다.
render: function() {
var json = this.getStateFromFlux().json;
return (
<div>
<JsonSubmitter onSubmit={this.onSubmit} />
{ JSON.stringify(json, null, 2) }
</div>
);
},
그로스 JSON을 표현하면"{ \"foo\" : 2, \"bar\": 2}\n"
.
어떻게 하면 그 글자들을 제대로 해석할 수 있을까요?{
다음 중 하나를 삽입해야 합니다.BR
결과 문자열에 적절한 태그를 붙이거나 예를 들어 a를 사용합니다.PRE
태그 붙이기 때문에 포맷이stringify
유지:
var data = { a: 1, b: 2 };
var Hello = React.createClass({
render: function() {
return <div><pre>{JSON.stringify(data, null, 2) }</pre></div>;
}
});
React.render(<Hello />, document.getElementById('container'));
작업 예
갱신하다
class PrettyPrintJson extends React.Component {
render() {
// data could be a prop for example
// const { data } = this.props;
return (<div><pre>{JSON.stringify(data, null, 2) }</pre></div>);
}
}
ReactDOM.render(<PrettyPrintJson/>, document.getElementById('container'));
상태 비저장 기능 구성 요소, React .14 이상
const PrettyPrintJson = ({data}) => {
// (destructured) data could be a prop for example
return (<div><pre>{ JSON.stringify(data, null, 2) }</pre></div>);
}
아니면...
const PrettyPrintJson = ({data}) => (<div><pre>{
JSON.stringify(data, null, 2) }</pre></div>);
메모 / 16.6 이상
(메모도 사용할 수 있습니다.16.6+).
const PrettyPrintJson = React.memo(({data}) => (<div><pre>{
JSON.stringify(data, null, 2) }</pre></div>));
TLDR
JavaScript 및 React에서 JSON을 예쁘게 인쇄합니다.
<pre>{JSON.stringify(data, null, 2)}</pre>
WiredPrairie의 답변을 조금 더 자세히 설명하자면, 개폐가 가능한 미니 컴포넌트입니다.
다음과 같이 사용할 수 있습니다.
<Pretty data={this.state.data}/>
export default React.createClass({
style: {
backgroundColor: '#1f4662',
color: '#fff',
fontSize: '12px',
},
headerStyle: {
background-color: '#193549',
padding: '5px 10px',
fontFamily: 'monospace',
color: '#ffc600',
},
preStyle: {
display: 'block',
padding: '10px 30px',
margin: '0',
overflow: 'scroll',
},
getInitialState() {
return {
show: true,
};
},
toggle() {
this.setState({
show: !this.state.show,
});
},
render() {
return (
<div style={this.style}>
<div style={this.headerStyle} onClick={ this.toggle }>
<strong>Pretty Debug</strong>
</div>
{( this.state.show ?
<pre style={this.preStyle}>
{JSON.stringify(this.props.data, null, 2) }
</pre> : false )}
</div>
);
}
});
갱신하다
좀 더 현대적인 접근법(create Class가 출시 예정)
import styles from './DebugPrint.css'
import autoBind from 'react-autobind'
import classNames from 'classnames'
import React from 'react'
export default class DebugPrint extends React.PureComponent {
constructor(props) {
super(props)
autoBind(this)
this.state = {
show: false,
}
}
toggle() {
this.setState({
show: !this.state.show,
});
}
render() {
return (
<div style={styles.root}>
<div style={styles.header} onClick={this.toggle}>
<strong>Debug</strong>
</div>
{this.state.show
? (
<pre style={styles.pre}>
{JSON.stringify(this.props.data, null, 2) }
</pre>
)
: null
}
</div>
)
}
}
그리고 당신의 스타일 파일
.root {
background-color: #1f4662;
color: #fff;
font-size: 12px;
}
.header {
background-color: #193549;
padding: 5px 10px;
font-family: monospace;
color: #ffc600;
}
.pre {
display: block;
padding: 10px 30px;
margin: 0;
overflow: scroll;
}
react-json-view'는 솔루션 렌더링 json 문자열을 제공합니다.
import ReactJson from 'react-json-view';
<ReactJson src={my_important_json} theme="monokai" />
const getJsonIndented = (obj) => JSON.stringify(newObj, null, 4).replace(/["{[,\}\]]/g, "")
const JSONDisplayer = ({children}) => (
<div>
<pre>{getJsonIndented(children)}</pre>
</div>
)
그러면 쉽게 사용할 수 있습니다.
const Demo = (props) => {
....
return <JSONDisplayer>{someObj}<JSONDisplayer>
}
간결하고 심플한
<div>
<pre dangerouslySetInnerHTML={{
__html: JSON.stringify(data, null, 2),
}} />
</div>
여기 데모가 있습니다.react_hooks_debug_print.html
리액트 훅에서 크리스의 답변을 기반으로 합니다.json 데이터의 예는 https://json.org/example.html에서 가져온 것입니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!-- Don't use this in production: -->
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script src="https://raw.githubusercontent.com/cassiozen/React-autobind/master/src/autoBind.js"></script>
<script type="text/babel">
let styles = {
root: { backgroundColor: '#1f4662', color: '#fff', fontSize: '12px', },
header: { backgroundColor: '#193549', padding: '5px 10px', fontFamily: 'monospace', color: '#ffc600', },
pre: { display: 'block', padding: '10px 30px', margin: '0', overflow: 'scroll', }
}
let data = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": [
"GML",
"XML"
]
},
"GlossSee": "markup"
}
}
}
}
}
const DebugPrint = () => {
const [show, setShow] = React.useState(false);
return (
<div key={1} style={styles.root}>
<div style={styles.header} onClick={ ()=>{setShow(!show)} }>
<strong>Debug</strong>
</div>
{ show
? (
<pre style={styles.pre}>
{JSON.stringify(data, null, 2) }
</pre>
)
: null
}
</div>
)
}
ReactDOM.render(
<DebugPrint data={data} />,
document.getElementById('root')
);
</script>
</body>
</html>
또는 다음 방법으로 머리글에 스타일을 추가합니다.
<style>
.root { background-color: #1f4662; color: #fff; fontSize: 12px; }
.header { background-color: #193549; padding: 5px 10px; fontFamily: monospace; color: #ffc600; }
.pre { display: block; padding: 10px 30px; margin: 0; overflow: scroll; }
</style>
치환DebugPrint
다음과 같이 설정합니다.
const DebugPrint = () => {
// https://stackoverflow.com/questions/30765163/pretty-printing-json-with-react
const [show, setShow] = React.useState(false);
return (
<div key={1} className='root'>
<div className='header' onClick={ ()=>{setShow(!show)} }>
<strong>Debug</strong>
</div>
{ show
? (
<pre className='pre'>
{JSON.stringify(data, null, 2) }
</pre>
)
: null
}
</div>
)
}
언급URL : https://stackoverflow.com/questions/30765163/pretty-printing-json-with-react
'code' 카테고리의 다른 글
ID별 Woocommerce 제품 값 가져오기 (0) | 2023.02.12 |
---|---|
css에서 !보다 더 중요한 것이 있나요? (0) | 2023.02.12 |
내장된 기능을 사용하여 MVC6의 JQuery AJAX를 사용하여 면도기 양식 제출 (0) | 2023.02.12 |
JDBC를 사용하여 Oracle 데이터베이스에 연결하기 위한 URL 문자열 형식 (0) | 2023.02.12 |
레디스냐, 에캐시냐? (0) | 2023.02.12 |