React-Quill自动专注于编辑器其他输入其他输入元素?

如何解决React-Quill自动专注于编辑器其他输入其他输入元素?

我正在使用react-quill作为我的编辑器,最近我配置了图像处理程序函数以将prop传递给处理程序,并且在进行更改后,我的编辑器的行为很奇怪,并且每当我在其他输入字段上键入内容时,我的编辑器就会进入焦点并自动键入单词 以下是我的编辑器的代码 请任何帮助或建议,将不胜感激。

  Component
} from 'react';

// import {
//   Editor
// } from 'react-draft-wysiwyg';
import draftToHtml from 'draftjs-to-html';
import htmlToDraft from 'html-to-draftjs';
import axios from 'axios'
import {
  API_URL
} from './../../api_url'
// import * as Icons from 'images/icons';
import * as loadImage from 'blueimp-load-image';
import {
  key
} from '../../assets/encryptionkey'
import globalStyles from '../../stylesheets/ui.css'
import blogStyles from './blogs.css'
import bootstrapStyles from '../../stylesheets/bootstrap/css/bootstrap.min.css'
import fontAwesomeStyles from '../../stylesheets/font-awesome/css/font-awesome.min.css'
import actionIconsStyles from '../../stylesheets/action_icons.css'
import cx from 'classnames'
import './editor.css';
import s from './editor.css';
//import CKEditor from '@ckeditor/ckeditor5-react';
//import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
//import ReactQuill,{ Quill } from "react-quill";

//var Image = Quill.import('formats/image');
//Image.className = 'custom-class-to-image';
//Quill.register(Image,true);



export default class BlogEditor extends Component {
  constructor( loader ) {
  super();
  this.state = {
   
     editorHtml: '',theme: 'snow',text:''   
  }
  this.handleChange = this.handleChange.bind(this)
  // var that=this;
  if (typeof window !== 'undefined') {
    this.ReactQuill = require('react-quill')
    const ReactQuill=this.ReactQuill;
    var Image = ReactQuill.Quill.import('formats/image');
    Image.className = 'blog-content-image';
    ReactQuill.Quill.register(Image,true);
    // ReactQuill.Quill.setContents(editor.clipboard.convert(html));
   
  }

  }

  componentWillReceiveProps(){
    //debugger
    let clearContent=this.props.clearContent
    if(clearContent){
      // this.editorRef.setEditorContents(this.editorRef.getEditor(),'<h1>test</h1>');
      
    }

  }

  handleChange(value) {
   //debugger
   
    this.setState({ text: value })
    // this.props.changeInEditor(value)
  }
  

  imageHandler({ val,componentProps }) {
    // debugger
   
    let self=this
    let image;
    let image_extension;
    const Cryptr = require('cryptr');
    const cryptr = new Cryptr(key);
    const users = localStorage.getItem('users') ? JSON.parse(cryptr.decrypt(localStorage.getItem('users'))) : {}
    // console.log(users[users.lastLoginId])
    let loggedinUser = users[users.lastLoginId];
    const input = document.createElement('input');

    input.setAttribute('type','file');
    input.setAttribute('accept','image/*');
    input.setAttribute("class","Editor-mage");
    input.click();

    input.onchange = async () => {
      //debugger
        const file = input.files[0];

        var ValidImageTypes = ["image/gif","image/jpeg","image/png","image/jpg","image/GIF","image/JPEG","image/PNG","image/JPG"]; 
        let file_type = file.type
        let filename = file.name
        let extension = filename.split('.').pop();
        if(ValidImageTypes.indexOf(file_type) >= 0){
          if(file.size<=500000&&file.size>=50000){
           
            var fileToLoad = file
    
            loadImage(fileToLoad,(canvas) => {
             
              if(canvas){
               // this.setState({
                  image=canvas.toDataURL()
                  image_extension=extension
                //});
              
                
                const res = new Promise(function(resolve,reject) {
                  axios({
                    method:'post',url:API_URL+'api/v1/postblogimage',headers:{
                      'x-access-handler':loggedinUser.token
                    },data:{
                      image: image,image_extension:image_extension,userid:loggedinUser.userid
                    }
                  })
                  //axios.post(API_URL + 'api/v1/postblogimage',formData,config)
                  .then((response) => {
                    
                    if (response.data.error == 'false' || response.data.error == false) {
                      if (response.data.status == 200 && response.data.message == "Image uploaded successfully") {
                        
                       //debugger
                          const range = self.quill.getSelection(true);
          
                          // Insert temporary loading placeholder image
                          // this.quill.insertEmbed(range.index,'image',`${window.location.origin}/images/loaders/placeholder.gif`);
                  
                          // Move cursor to right side of image (easier to continue typing)
                          self.quill.setSelection(range.index + 1);
                  
                        
                          // Remove placeholder image
                          self.quill.deleteText(range.index,1);
                  
                          // Insert uploaded image
                          let url=response.data.data[0].imageURL;
                          self.quill.insertEmbed(range.index,url);
                          self.quill.pasteHTML(range.index,<img src={url} class="blog-image-content" alt="Responsive image"/>);
            
                        
                      }
                     
                    }else if(response.data.error == 'true' || response.data.status == '500')
                    componentProps.error('Sorry,Inappropriate image')
                  
                    // } 
          
                  }).catch((error) => {
                    // reject(Error("It broke"));
                  });
                
                
                });
              }
             
            },{orientation: true});
          }
          else{
            componentProps.error(" Sorry,File size should be of size between 50 kb to 500kb")
          }
        }
        else{
         // this.setState({
            // image_warning:'Invalid image type',// image:'',// image_extension:''
          //})
         // this.fileInput.value=''
        }
     

       
    };
}




  render() {
  
    const ReactQuill = this.ReactQuill
    if (typeof window !== 'undefined' && ReactQuill) {
    return (
      
      <div className="editor-container">
         <ReactQuill
         ref={(el) => this.quillRef = el
      }
      onChange={this.handleChange}
      placeholder={"share your thoughts"}
                  modules={{
                    toolbar: {
                        container: [
                            [{ header: '1' },{ header: [2,3,4,5,6] },{ font: [] }],[{ size:   [ 'small',false,'large','huge' ] }],['bold','italic','underline','strike','blockquote'],[{ list: 'ordered' },{ list: 'bullet' }],['link','video'],['clean'],['code-block'],[{ 'color': [] },{ 'background': [] }],// dropdown with defaults from theme
                            
                            [{ 'align': [] }],],handlers: {
                         image: (val) => this.imageHandler({ val,componentProps: this.props })
                          // image: () => this.imageHandler
 
                        }
                    }
                }}
                  />

      </div>
    )
              }       
              else {
                return <textarea />;
              } 
  }
}```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-