【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
相关推荐
@大迁世界3 小时前
React Native 0.77 发布:更强的样式支持与性能优化
javascript·react native·react.js·ecmascript
汪子熙3 小时前
Angular 项目中 Could not find Nx modules in this workspace 错误的分析与解决
前端·javascript
CaptainDrake3 小时前
React 低代码项目:项目创建
前端·react.js·低代码
Y编程小白6 小时前
ECMAScript 6语法
前端·javascript·ecmascript
不写八个9 小时前
Vue3.0教程004:ref和reactive对比
前端·javascript·vue.js
梅羽落11 小时前
JavaScript_03 超简计算器
前端·javascript
ChinaRainbowSea11 小时前
四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)
java·javascript·数据库·redis·后端·nosql
Easonmax13 小时前
【javaSE】内部类(来自类和对象的补充)
开发语言·javascript·ecmascript
新青年.15 小时前
【uniapp】uniapp使用java线程池
javascript·uni-app