【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
相关推荐
DownToEarth3 分钟前
H5实现获取当前定位
javascript
前端Hardy11 分钟前
HTML&CSS:惊艳!科技感爆棚的登录页面代码解析
前端·javascript·html
我是哈哈hh23 分钟前
【AJAX项目】黑马头条——数据管理平台
前端·javascript·ajax·前端框架·axios·proxy模式
Ronin-Lotus28 分钟前
上位机知识篇---AJAX
前端·javascript·ajax
拾光拾趣录32 分钟前
箭头函数 vs 普通函数:从“this 指向混乱”到写出真正健壮的代码
前端·javascript
咔咔一顿操作1 小时前
常见问题三
前端·javascript·vue.js·前端框架
前端程序媛Ying1 小时前
点击按钮滚动到底功能vue的v-on:scroll运用
javascript
yvvvy2 小时前
白嫖 React 性能优化?是的,用 React.memo!
前端·javascript
NicolasCage2 小时前
react-typescript学习笔记
javascript·react.js
JohnYan2 小时前
Bun技术评估 - 16 Package Manager
javascript·后端·bun