You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS员工注册页面PDF文档加载失败问题求助

解决React员工注册表单中PDF加载失败及报错问题

以下是针对你代码中问题的分步解决方案:

1. 补充缺失的状态与核心函数

代码中使用了pageNumber、onDocumentLoadSuccess和handleDocumentAcknowledgement,但这些变量和函数未定义,这是页面报错的直接原因之一。添加以下代码到组件内:

const [pageNumber, setPageNumber] = useState(1);
const [numPages, setNumPages] = useState(null);

const onDocumentLoadSuccess = ({ numPages }) => {
  setNumPages(numPages);
  setPageNumber(1);
};

const handleDocumentAcknowledgement = () => {
  setUserData({ ...userData, documentAcknowledged: true });
};

2. 修正PDF文件路径

React项目中静态资源需按规范放置:

  • 若将PDF放在public/Docs/test.pdf,使用绝对路径:
<Document
  file="/Docs/test.pdf"
  onLoadSuccess={onDocumentLoadSuccess}
>
  <Page pageNumber={pageNumber} />
</Document>
  • 若PDF在src目录下,通过import引入后使用:
import testPdf from './Docs/test.pdf';

// 组件内使用
<Document file={testPdf} onLoadSuccess={onDocumentLoadSuccess}>
  <Page pageNumber={pageNumber} />
</Document>

3. 配置PDF.js Worker(react-pdf v3+必备)

react-pdf v3及以上版本需要手动配置Worker,否则会加载失败。在组件顶部添加:

import { Document, Page, pdfjs } from 'react-pdf';
pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.js`;

4. 修复表单输入绑定错误

PF UAN输入框的value绑定错误,修正为:

<input
  type="number"
  name="pfUAN"
  value={userData.pfUAN}
  onChange={handleInputChange}
/>

修正后的核心代码片段

import React, { useState } from 'react';
import DatePicker from 'react-datepicker';
import { Document, Page, pdfjs } from 'react-pdf';
import 'react-datepicker/dist/react-datepicker.css';

// 配置PDF Worker
pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.js`;

function EmployeeRegistration() {
  const [userData, setUserData] = useState({
    fullName: '',
    gender: '',
    aadhaarNumber: '',
    dateofBirth: null,
    maritalStatus: '',
    emergencyContactName: '',
    address: '',
    phoneNumber: '',
    emailID: '',
    emergencyContactNumber: '',
    jobTitle: '',
    departmentName: '',
    joiningDate: '',
    employmentType: '',
    education: [],
    workExperience: [],
    relevantSkills: '',
    pfUAN:'',
    esiNO:'',
    documentAcknowledged: false,
  });
  const [pageNumber, setPageNumber] = useState(1);
  const [numPages, setNumPages] = useState(null);

  // 原有处理函数...

  const onDocumentLoadSuccess = ({ numPages }) => {
    setNumPages(numPages);
    setPageNumber(1);
  };

  const handleDocumentAcknowledgement = () => {
    setUserData({ ...userData, documentAcknowledged: true });
  };

  return (
    <div>
      <form>
        {/* 原有表单内容... */}
        <label>
          PF UAN number:
          <input
            type="number"
            name="pfUAN"
            value={userData.pfUAN}
            onChange={handleInputChange}
          />
        </label>
        <br />
        <label>
          ESI Number:
          <input
            type="number"
            name="esiNO"
            value={userData.esiNO}
            onChange={handleInputChange}
          />
        </label>
        <br />
        <div>
          <h3>Document</h3>
          <Document
            file="/Docs/test.pdf"
            onLoadSuccess={onDocumentLoadSuccess}
          >
            <Page pageNumber={pageNumber} />
          </Document>
          <p>Page {pageNumber} of {numPages}</p>
          {!userData.documentAcknowledged && (
            <button type="button" onClick={handleDocumentAcknowledgement}>
              Acknowledge Document
            </button>
          )}
        </div>
        <button type="submit" className="btn btn-default btn-sm">Submit</button>
      </form>
    </div>
  );
}

export default EmployeeRegistration;

内容的提问来源于stack exchange,提问作者user15904369

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:00:34