首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态文件源React-PDF (Hooks)

动态文件源React-PDF (Hooks)
EN

Stack Overflow用户
提问于 2021-02-08 00:47:37
回答 1查看 517关注 0票数 1

我正在尝试实现一个react-pdf解决方案,其中用户可以选择他们想要呈现的pdf。我想出了一个钩子解决方案,但我不明白为什么PDF不能渲染。

代码语言:javascript
复制
import React,{useState,useEffect} from  'react';
import samplePDF from "somelocalpath/microcert.pdf";
import file2 from "somelocalpath/CourseCertificate.pdf";
import { Document, Page,pdfjs } from 'react-pdf';
import './frontend.css';
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;

function Pdfview(){
  const [numPages, setNumPages] = useState(null);
  const [pageNumber, setPageNumber] = useState(1);
  const [pdfile,setPDF]=useState('');
  function onDocumentLoadSuccess({ numPages }) {
    setNumPages(numPages);
    setPageNumber(1);
    console.log(pdfile);
  }

  function changePage(offset) {
    setPageNumber(prevPageNumber => prevPageNumber + offset);
  }
  function changePDF(){
    setPDF({file2})
 }

  function previousPage() {
    changePage(-1);
  }

  function nextPage() {
    changePage(1);
  }
  useEffect(()=>{
  },[pdfile]);

  return(
  <div className='grid-container'>
    <div className='sidespace'></div>
      <div className='sidebar'>
        <button onClick={changePDF}>Click Here to Change PDF</button>
      </div>
        <div className='pdf'>
        <Document
        file={pdfile}
        onLoadSuccess={onDocumentLoadSuccess}
      >
        <Page pageNumber={pageNumber} />
      </Document>
      <div>
        <p>
          Page {pageNumber || (numPages ? 1 : '--')} of {numPages || '--'}
        </p>
        <button
          type="button"
          disabled={pageNumber <= 1}
          onClick={previousPage}
        >
          Previous
        </button>
        <button
          type="button"
          disabled={pageNumber >= numPages}
          onClick={nextPage}
        >
          Next
        </button>
      </div>
        </div>
        <div className='sidespaceright'></div>
  </div> 
);
}


export default Pdfview;

我知道如果我将文件设置为等于{samplePDF}或{file2},PDF将会呈现,但我似乎不明白为什么它不会呈现,如果它使用useState钩子中的pdfile。当我试图渲染它时,我得到了这个错误:

代码语言:javascript
复制
Error: Invalid parameter object: need either .data, .range or .url
    at _callee2$ (Document.js:332)
    at tryCatch (runtime.js:63)
    at Generator.invoke [as _invoke] (runtime.js:293)
    at Generator.next (runtime.js:118)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
    at asyncToGenerator.js:32
    at new Promise (<anonymous>)
    at Document.findDocumentSource (asyncToGenerator.js:21)
    at _callee$ (Document.js:100)
    at tryCatch (runtime.js:63)
    at Generator.invoke [as _invoke] (runtime.js:293)
    at Generator.next (runtime.js:118)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
    at asyncToGenerator.js:32
    at new Promise (<anonymous>)
    at Document.loadDocument (asyncToGenerator.js:21)
    at Document.componentDidUpdate (Document.js:388)
    at commitLifeCycles (react-dom.development.js:20684)
    at commitLayoutEffects (react-dom.development.js:23426)
    at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)
    at invokeGuardedCallback (react-dom.development.js:4056)
    at commitRootImpl (react-dom.development.js:23151)
    at unstable_runWithPriority (scheduler.development.js:646)
    at runWithPriority$1 (react-dom.development.js:11276)
    at commitRoot (react-dom.development.js:22990)
    at performSyncWorkOnRoot (react-dom.development.js:22329)
    at react-dom.development.js:11327
    at unstable_runWithPriority (scheduler.development.js:646)
    at runWithPriority$1 (react-dom.development.js:11276)
    at flushSyncCallbackQueueImpl (react-dom.development.js:11322)
    at flushSyncCallbackQueue (react-dom.development.js:11309)
    at discreteUpdates$1 (react-dom.development.js:22420)
    at discreteUpdates (react-dom.development.js:3756)
    at dispatchDiscreteEvent (react-dom.development.js:5889)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-08 01:06:49

我想通了。

更改函数:

代码语言:javascript
复制
  function changePDF(){
    setPDF({file2})
 }

至:

代码语言:javascript
复制
  function changePDF(){
    setPDF(file2)
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66090444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档