首页 > 其他分享 >react-quill 自定义上传图片方法

react-quill 自定义上传图片方法

时间:2024-06-14 17:55:32浏览次数:20  
标签:current const 自定义 image react quillEdit input quill

react-quill 网上找了自定义上传图片的方式。测试后都失败,会报:

react-quill addRange(): The given range isn't in document.

解决办法:

关键点: 在创建实例后,去重新设置image的uploader方法。(蓝色部分)

代码:

 

const [content, setContent] = useState(''); const quillEdit = useRef(); const options = useMemo(() => ({         toolbar: {             container: [                 // ['bold', 'italic', 'underline', 'strike'],        // toggled buttons                 // ['blockquote', 'code-block'],                 // ['link', 'image', 'formula'],
                // [{ 'header': 1 }, { 'header': 2 }],               // custom button values                 // [{ 'list': 'ordered' }, { 'list': 'bullet' }, { 'list': 'check' }],                 // [{ 'script': 'sub' }, { 'script': 'super' }],      // superscript/subscript                 // [{ 'indent': '-1' }, { 'indent': '+1' }],          // outdent/indent                 // [{ 'direction': 'rtl' }],                         // text direction
                // [{ 'size': ['small', false, 'large', 'huge'] }],  // custom dropdown                 // [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
                // [{ 'color': [] }, { 'background': [] }],          // dropdown with defaults from theme                 // [{ 'font': [] }],                 // [{ 'align': [] }],
                // ['clean']                 ['image'],             ],         },     })) const quillImageUploader = () => {         const input = document.createElement('input')         input.setAttribute('type', 'file')         input.setAttribute('accept', 'image/*')         input.setAttribute('multiple', 'multiple')         input.click()         input.onchange = async () => {             Array.from(input.files).forEach(item => {                 const formData = new FormData();                 formData.append('file', item, '');                 R.upload('/api/admin/m/upload', formData).then(({ model }) => {                     const { path } = model;                     var cursorPosition = quillEdit.current.getEditor().getSelection(true).index;                     quillEdit.current.getEditor().insertEmbed(cursorPosition, "image", UPLOAD_BASE_PATH + path);                     quillEdit.current.getEditor().setSelection(cursorPosition + 1);                 })             })         }     } const setQuillEdit = (r) => {         quillEdit.current = r;         if (r) {             r.getEditor().getModule('toolbar').handlers.image = quillImageUploader         }     }   return (  <ReactQuill ref={o => setQuillEdit(o)} modules={options}                 style={{ height: 400, width: 375 }}                 theme='snow'                 value={content}                 onChange={setContent}             /> )      

 

标签:current,const,自定义,image,react,quillEdit,input,quill
From: https://www.cnblogs.com/ckaaaa/p/18248385

相关文章

  • ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 添加自定义(GLSL)数据
    ArcGISJSAPI高级教程-ArcGISMapsSDKforJavaScript-添加自定义(GLSL)数据核心代码完整代码在线示例ArcGISMapsSDKforJavaScript从4.29开始增加RenderNode类,可以添加数据以及操作FBO(ManagedFBO);通过操作FBO,可以通过后处理实现很多效果,官方提供了几......
  • Radix UI:构建一致且可访问的 React 组件库
    RadixUI:构建一致且可访问的React组件库简介在当今的前端开发领域,React以其声明式编程范式和组件化架构,成为最受欢迎的JavaScript库之一。然而,创建一致的用户体验和可访问的界面往往需要大量的工作。这就是RadixUI组件库发挥作用的地方。什么是RadixUI?RadixU......
  • Teamcenter AWC aw-chart自定义图表
    1.从服务器获取数据:exportconstqueryChartsData=function(data){// returnnewPromise(function(resolve){//  setTimeout(function(){    varURL_service=get_URL_service()+"reports/get_workflow_datas";//    eventBus.publish("pro......
  • React函数式组件环境中父组件调用子组件的方法
    importReact,{useRef,useCallback}from'react';//子组件constChildComponent=React.forwardRef((props,ref)=>{constdoSomething=useCallback(()=>{console.log('Dosomethinginthechildcomponent');},[]);......
  • uni-app在微信小程序端自定义组件中样式穿透失效
    前情uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app。坑位最近因UI有别的事忙,导致手上暂时没什么活了,我于是抽时间优化项目代码,第一件事就是抽取复用组件。正好项目中有多处用到uVie......
  • x.thumbnailer 修复psd缩略图/nemo-preview 自定义预览
    缩略图https://askubuntu.com/questions/1368910/how-to-create-custom-thumbnailers-for-nautilus-nemo-and-caja安装imagemagicksudoaptinstallimagemagick-6.q16/usr/share/thumbnailers/psd.thumbnailerhttps://moritzmolch.com/blog/1749.htmlcd/usr/share/thumbn......
  • 微服务架构qiankun集成react子应用
    前一篇文章讲了qiankun集成vue子应用,这篇随笔讲集成react子应用。1、创建react子应用用react脚手架初始化一个react项目,至于项目的数据仓库store和路由、以及UI组件库这里就不做讲解,可以自己自行网上找资料配置。create-react-appmy-react-app2、在src路径下创建publicPat......
  • 什么是React的虚拟DOM?它如何工作以提高性能?
    React的虚拟DOM(VirtualDOM)是React框架中的一个核心概念,它是一个轻量级的JavaScript对象树,用于描述真实DOM的结构和属性。虚拟DOM的引入极大地提高了React应用程序的性能,其工作原理主要体现在以下几个方面:虚拟DOM的定义虚拟DOM是一个JavaScript对象,它是真实DOM的抽象表示......
  • elasticsearch之ik分词器和自定义词库实现
    ElasticSearch分词器所谓的分词就是通过tokenizer(分词器)将一个字符串拆分为多个独立的tokens(词元-独立的单词),然后输出为tokens流的过程。例如"mynameisHanMeiMei"这样一个字符串就会被默认的分词器拆分为[my,name,isHanMeiMei].ElasticSearch中提供了很多默认的分词器,我......
  • 自定义MyBatis插件
    插件原理回顾在前面,我们通过MyBatis插件机制介绍与原理分析了MyBatis插件的基本原理,但是可能还只是理论上的分析,没有实战的锻炼可能理解的还是不够透彻。接下来,我们通过自定义插件实例来进一步深度理解MyBatis插件的插件机制。插件接口MyBatis插件接口-Interceptor有......