javascript - 在 reactjs 中显示多个 PDF 文件
问题描述
我是新来的反应,我有多个 pdf,我试图根据选择的链接显示。我已经设法从存储在 src 目录中的我的 PDF 的可选链接列表中显示一个 PDF。但是,所有链接都会出现相同的 pdf。当我尝试显示不同的 pdf 时,出现此错误:
.
对于 PDF 查看,我使用了这里的代码:
https://npm.io/package/react-pdf
我的问题是如何实现这种情况,根据我点击的链接,我可以显示不同的 pdf。
我根据链接显示 pdf 的代码如下所示:
import React, { Component, useState } from "react";
import { Document, Page } from "react-pdf";
import myPdf from '../../../components/pdf/signed.pdf'
import ViewPdf from '../../../components/ViewPdf'
import ViewSecondPdf from '../../../components/ViewPdf2'
import ViewThirdPdf from '../../../components/ViewPdf3'
import AllPages from "src/components/pdf/AllPages";
import { Table, Col, Row, Button } from 'reactstrap'
import { Link } from "react-router-dom";
const Display = (props) => {
<div>
<AllPages pdf={props} />
</div>
}
const DocTable = ({ onToggle }) => {
return (
<>
<Link to="/sign" className="mb-2"><span className="material-icons">keyboard_backspace</span></Link><br />
<span style={{ fontWeight: 'bold' }}>Documents</span><br />
<Table bordered hover size="sm">
<thead>
<br />
<tr>
<th>ID</th>
<th>Document Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">001</th>
<td><Button id="MICButton" name="MICButton" color="link" onClick={onToggle}>Vehicle Insurance Claim</Button></td>
<td>Signed</td>
</tr>
<tr>
<th scope="row">002</th>
<td><Button id="HIButton" name="HIButton" color="link" onClick={onToggle}>Household Insurance Contract</Button></td>
<td>Signed</td>
</tr>
<tr>
<th scope="row">003</th>
<td><Button id="CIButton" name="CIButton" color="link" onClick={onToggle}>Vehicle Insurance Contract</Button></td>
<td>Not Signed</td>
</tr>
</tbody>
</Table>
<br />
</>
);
}
const DocumentList = () => {
const [isVisible, setIsVisible] = useState(false) // false to hide the PDF for the first time
const handleToggle = () => {
setIsVisible(prevState => !prevState)
}
if(document.getElementById('MICButton').onToggle == true){
return (
<div>
<Row>
<Col xs="6">
<DocTable isVisible={isVisible} onToggle={handleToggle} />
</Col>
<Col xs="6">
{isVisible && <ViewPdf />}
</Col>
</Row>
</div>
);
}
if(document.getElementById('HIButton').onToggle == true){
return (
<div>
<Row>
<Col xs="6">
<DocTable isVisible={isVisible} onToggle={handleToggle} />
</Col>
<Col xs="6">
{isVisible && <ViewSecondPdf />}
</Col>
</Row>
</div>
);
}
if(document.getElementById('CIButton').onToggle == true){
return (
<div>
<Row>
<Col xs="6">
<DocTable isVisible={isVisible} onToggle={handleToggle} />
</Col>
<Col xs="6">
{isVisible && <ViewThirdPdf />}
</Col>
</Row>
</div>
);
}
}
export default DocumentList
解决方案
您可以将 PDF ID 传递给 onToggle,然后根据它显示所需的组件
const DocTable = ({ onToggle }) => {
return (
<>
<Link to="/sign" className="mb-2">
<span className="material-icons">keyboard_backspace</span>
</Link>
<br />
<span style={{ fontWeight: 'bold' }}>Documents</span>
<br />
<Table bordered hover size="sm">
<thead>
<br />
<tr>
<th>ID</th>
<th>Document Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">001</th>
<td>
<Button id="MICButton" name="MICButton" color="link" onClick={() => onToggle('MICButton')}>
Vehicle Insurance Claim
</Button>
</td>
<td>Signed</td>
</tr>
<tr>
<th scope="row">002</th>
<td>
<Button id="HIButton" name="HIButton" color="link" onClick={() => onToggle('HIButton')}>
Household Insurance Contract
</Button>
</td>
<td>Signed</td>
</tr>
<tr>
<th scope="row">003</th>
<td>
<Button id="CIButton" name="CIButton" color="link" onClick={() => onToggle('CIButton')}>
Vehicle Insurance Contract
</Button>
</td>
<td>Not Signed</td>
</tr>
</tbody>
</Table>
<br />
</>
);
};
const DocumentList = () => {
const [isVisible, setIsVisible] = useState(false); // false to hide the PDF for the first time
const [activeDoc, setActiveDoc] = useState(null);
const handleToggle = (docID) => {
setIsVisible((prevState) => !prevState);
setActiveDoc(docID);
};
return (
<div>
<Row>
<Col xs="6">
<DocTable isVisible={isVisible} onToggle={handleToggle} />
</Col>
<Col xs="6">
{(() => {
if(!isVisible){
return null
}
switch (activeDoc) {
case 'MICButton':
return <ViewPdf />;
case 'HIButton':
return <ViewSecondPdf />;
case 'CIButton':
return <ViewThirdPdf />;
default:
return null;
}
})()}
</Col>
</Row>
</div>
);
};
推荐阅读
- apache-spark - 如何从 Spark 将数据放入 Ignite Cache
- pytorch - 在 Ubuntu 20.04 上安装适当版本的 CUDA 和 CuDNN 后,torch.cuda.is_available() 会返回 FALSE
- java - java.sql.SQLRecoverableException:IO 错误:连接重置
- jinja2 - 如何在 Jinja 的 for 循环后省略空行?
- javascript - 设置 initialSlide 时,光滑的滑块不起作用
- r - FUN == 'x' 不起作用,如何在 R 中绕过它
- javascript - Oracle Apex - 单击按钮时复制页面的 URL
- java - How can I create vertical bars at a specific position after a value?
- flutter - 无论如何要减小这个 Flutter 应用程序的大小(120mb)
- python - 如何使用 PySerial 重新连接蓝牙连接(算法问题)Raspberry Pi - 蓝牙设备