React组件,可以解析并显示各种形式的JSON内容

它使用递归的方式遍历JSON对象,并将其渲染为可展开的树形结构。

import React, { useState } from 'react';

const JsonViewer = ({ data }) => {
  const [expanded, setExpanded] = useState(false);

  const handleClick = () => {
    setExpanded(!expanded);
  };

  const renderNode = (key, value) => {
    if (typeof value === 'object' && value !== null) {
      return <JsonViewer data={value} />;
    } else {
      return <span>{value}</span>;
    }
  };

  const renderTree = (data, level = 0) => {
    const keys = Object.keys(data);

    return keys.map((key) => {
      const value = data[key];
      const isObject = typeof value === 'object' && value !== null;
      const hasChildren = isObject && Object.keys(value).length > 0;

      const node = (
        <div style={{ marginLeft: level * 20 }}>
          {isObject && (
            <button onClick={handleClick}>
              {expanded ? '-' : '+'}
            </button>
          )}
          <strong>{key}: </strong>
          {renderNode(key, value)}
        </div>
      );

      if (isObject && expanded && hasChildren) {
        return (
          <div key={key}>
            {node}
            {renderTree(value, level + 1)}
          </div>
        );
      } else {
        return <div key={key}>{node}</div>;
      }
    });
  };

  return <div>{renderTree(data)}</div>;
};

export default JsonViewer;

使用该组件时,只需将要显示的JSON对象传递给data属性即可:

import React from 'react';
import JsonViewer from './JsonViewer';

const App = () => {
  const sampleJson = {
    name: 'John',
    age: 30,
    hobbies: ['reading', 'coding', 'swimming'],
    address: {
      street: '123 Main St',
      city: 'New York',
      country: 'USA'
    }
  };

  return (
    <div>
      <h1>JSON Viewer</h1>
      <JsonViewer data={sampleJson} />
    </div>
  );
};

export default App;

这样,传入的sampleJson将会以树形结构显示在页面上。你可以展开和折叠每个对象,并且可以根据需要传入不同的JSON对象进行查看和修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design Pro 中可以使用 `react-pdf` 这个第三方库来实现 PDF 文件的预览和打印。具体实现步骤如下: 1. 安装 `react-pdf` 库 ``` npm install react-pdf ``` 2. 在组件中引入 `Document`、`Page` 和 `pdfjs` 组件 ```javascript import { Document, Page, pdfjs } from 'react-pdf'; pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`; ``` 3. 在页面中使用 `Document` 和 `Page` 组件来渲染 PDF 文件 ```javascript <Document file="/example.pdf"> <Page pageNumber={1} /> </Document> ``` 其中 `file` 属性指定要渲染的 PDF 文件路径,`Page` 组件的 `pageNumber` 属性指定要渲染的页码。 4. 添加打印功能 ```javascript import { pdfjs, Document, Page, pdf } from 'react-pdf'; import { Button } from 'antd'; pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`; class PDFViewer extends React.Component { state = { numPages: null, pageNumber: 1, }; onDocumentLoadSuccess = ({ numPages }) => { this.setState({ numPages }); }; goToPrevPage = () => { this.setState(prevState => ({ pageNumber: prevState.pageNumber - 1 })); }; goToNextPage = () => { this.setState(prevState => ({ pageNumber: prevState.pageNumber + 1 })); }; printDocument = () => { pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`; const loadingTask = pdfjs.getDocument(this.props.file); loadingTask.promise.then(pdf => { const printOptions = { ...pdfjs.DefaultPrintParams, printResolution: 150, embedJavascript: true, }; const pdfWindow = window.open('', '_blank', 'width=800,height=600,scrollbars=no'); pdfWindow.document.write('<html><head><title>Print</title></head><body>'); pdfWindow.document.write('<embed type="application/pdf" '); pdfWindow.document.write(`src="${this.props.file}" `); pdfWindow.document.write(`id="pdfDocument" `); pdfWindow.document.write(`print="print" `); pdfWindow.document.write(`options='${JSON.stringify(printOptions)}' `); pdfWindow.document.write('></embed>'); pdfWindow.document.write('</body></html>'); pdfWindow.document.close(); setTimeout(() => { pdfWindow.print(); }, 500); }); }; render() { const { pageNumber, numPages } = this.state; return ( <div> <p> Page {pageNumber} of {numPages} </p> <Document file={this.props.file} onLoadSuccess={this.onDocumentLoadSuccess}> <Page pageNumber={pageNumber} /> </Document> <Button disabled={pageNumber <= 1} onClick={this.goToPrevPage}> Previous </Button> <Button disabled={pageNumber >= numPages} onClick={this.goToNextPage}> Next </Button> <Button onClick={this.printDocument}>Print</Button> </div> ); } } export default PDFViewer; ``` 在上面的代码中,我们添加了一个 `printDocument` 方法,该方法会打开一个新的窗口,并在窗口中显示 PDF 文件,然后调用 `window.print()` 方法将 PDF 文件打印出来。注意,该方法中使用了 PDF.js 库的 `getDocument` 方法来获取 PDF 文件的信息。 这样就可以在 Ant Design Pro 中预览和打印 PDF 文件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值