【React】React预览docx文件

React预览docx文件

封装DocxView组件,用于显示docx文件的预览,支持加载loading效果

安装依赖

复制代码
npm i docx-preview

import React, { useEffect, useRef, useState } from 'react'
import * as docx from 'docx-preview'
import { Spin } from 'antd'
import { askDocApiUrls } from 'src/shared/url-map'

export interface Props {
  fileInfo: string
}

const DocxView = (props: Props) => {
  const { fileInfo } = props
  const [isLoading, setIsLoading] = useState<boolean>(true)
  const docxContainerRef = useRef<HTMLDivElement | null>(null)

  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await fetch(fileInfo)
        const data = await response.blob()
        const containerElement = docxContainerRef.current
        if (containerElement) {
          docx.renderAsync(data, containerElement).then(() => {
            console.info('docx: finished')
            setIsLoading(false)
          })
        }
      } catch (error) {
        setIsLoading(false)
        console.error('Error fetching or rendering document:', error)
      }
    }

    fetchData()
  }, [fileInfo])

  return (
    <div className="relative h-full">
      <div ref={docxContainerRef} className="h-full" />
      {isLoading && (
        <div className="absolute inset-0 flex items-center justify-center bg-white bg-opacity-75">
          <Spin size="large" />
        </div>
      )}
    </div>
  )
}

export default DocxView
相关推荐
大明二代几秒前
基于 Microsoft Graph API 与 React Email 构建现代化邮件发送系统
前端·react.js·microsoft
风止何安啊4 分钟前
那些让你 debug 到凌晨的陷阱,我帮你踩平了:React Hooks 避坑指南
前端·react.js·面试
小笔学长8 分钟前
观察者模式:实现对象间的消息传递
javascript·观察者模式·项目实战·前端开发
梵尔纳多13 分钟前
打包 Electron 程序
前端·javascript·electron
好好学习啊天天向上18 分钟前
CFD,GPU加速效果,FUN3D GPU移植加速效果2
javascript·opencv·webpack
GISer_Jing27 分钟前
Taro打造电商项目实战
前端·javascript·人工智能·aigc·taro
KLW7532 分钟前
vue watch监听
前端·javascript·vue.js
林恒smileZAZ38 分钟前
总结 Next.js 中的 Server Actions
开发语言·javascript·ecmascript
qq. 28040339841 小时前
react --> redux
前端·react.js·前端框架
前端不太难1 小时前
用 RN 的渲染模型,反推 Vue 列表的正确拆分方式
前端·javascript·vue.js