React实现预览展示docx和Excel文件
更新时间:2024年02月03日 16:14:26 作者:郭_昊
这篇文章主要为大家详细介绍了如何使用React实现预览展示docx和Excel文件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
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 DocxViewReact预览展示excel文件
封装了ExcelView来展示excel文件,支持显示loading
1.安装依赖
npm i @js-preview/excel
2.源码
import React, { useEffect, useRef, useState } from 'react'
import jsPreviewExcel, { JsExcelPreview } from '@js-preview/excel'
import '@js-preview/excel/lib/index.css'
import { Spin } from 'antd'
export interface Props {
fileInfo: string
}
const ExcelView = (props: Props) => {
const { fileInfo } = props
const excelContainerRef = useRef<HTMLDivElement | null>(null)
const excelPreviewerRef = useRef<JsExcelPreview | null>(null) // 保存 myExcelPreviewer 的引用
const [isLoading, setIsLoading] = useState<boolean>(true)
useEffect(() => {
const containerElement = excelContainerRef.current
if (containerElement && !excelPreviewerRef.current) {
// 初始化 myExcelPreviewer,并保存引用
const myExcelPreviewer = jsPreviewExcel.init(containerElement)
excelPreviewerRef.current = myExcelPreviewer
setIsLoading(true) // 开始加载时设置 loading 状态
myExcelPreviewer
.preview(fileInfo)
.then(() => {
setIsLoading(false) // 预览完成后取消 loading 状态
console.info('预览完成')
})
.catch((e) => {
setIsLoading(false) // 预览失败后取消 loading 状态
console.info('预览失败', e)
})
}
}, [fileInfo])
return (
<div className="relative h-full">
<div ref={excelContainerRef} 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 ExcelView
以上就是React实现预览展示docx和Excel文件的详细内容,更多关于React预览文件的资料请关注脚本之家其它相关文章!
相关文章
React-View-UI组件库封装Loading加载中源码
这篇文章主要介绍了React-View-UI组件库封装Loading加载样式,主要包括组件介绍,组件源码及组件测试源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-06-06
React Native 集成 iOS 原生功能(打印机功能为例)
在 React Native 项目中集成 iOS 原生功能是一个常见需求,本文将同样以打印机功能为例,详细介绍如何在 React Native 项目中集成 iOS 原生功能,感兴趣的朋友一起看看吧2024-12-12
react如何利用useRef、forwardRef、useImperativeHandle获取并处理dom
这篇文章主要介绍了react如何利用useRef、forwardRef、useImperativeHandle获取并处理dom,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2023-10-10
react ant-design Select组件下拉框map不显示的解决
这篇文章主要介绍了react ant-design Select组件下拉框map不显示的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-03-03


最新评论