如何在react-quill中注册对齐样式

2024-01-10

我在用着反应鹅毛笔 https://www.npmjs.com/package/react-quillnpm 包并在 nextjs 中动态导入它,我还使用 create-next-app 样板。 我能够让反应鹅毛笔编辑器工作,但是 我无法获取使用工具栏上的对齐按钮设置的图像样式/段落样式并重新显示内容 - 图像/段落。

使用案例:

  1. 添加图像/段落并从编辑器中的工具栏添加对齐方式。
  2. 将编辑器内容保存在数据库中
  3. 使用npm包从数据库重新显示react-quill编辑器的内容htmr https://www.npmjs.com/package/htmr

预期:图像/段落内容仍应右对齐/居中/对齐。

实际:图像/段落内容已删除所有样式属性。

下面是我的代码,如何在nextjs中注册react-quill的图像/段落的样式是我的问题

import { useState,useEffect } from 'react'
import Router from 'next/router'
import dynamic from 'next/dynamic' 
import { withRouter } from 'next/router'   // used to get access to props of react-dom
import { getCookie,isAuth } from '../../actions/auth';
import { createBlog }  from '../../actions/blog'

// dynamically importing react-quill  
const ReactQuill = dynamic( ()=> import('react-quill'), {ssr:false} )
import '../../node_modules/react-quill/dist/quill.snow.css'

const CreateBlog  = ( {router} ) => {


    const [ body,setBody ] = useState( blogFromLS() )
    const [ values,setValues ] = useState({
        error : '',
        sizeError : '',
        success : '',
        formData : '',
        title : '',
        hidePublishButton : false
    })


    const  { error, sizeError, success, formData, title, hidePublishButton } = values;
    const token = getCookie('token')

    useEffect(()=>{
            setValues({...values, formData: new FormData()})
            initCategories()
            intiTags()
    },[router])

    
    const handleChange = name => e => {
        //console.log(e.target.value)
        const value = name === 'photo' ? e.target.files[0] : e.target.value
        formData.set(name,value)
        setValues({...values, [name]:value, formData : formData , error:''})
    }; 

    const handleBody =  e => {
        //console.log(e)
        setBody(e)
        formData.set('body',e)
        if(typeof window !== 'undefined'){
            localStorage.setItem('blog',JSON.stringify(e))
        }
    }

    const publishBlog =(e) => {
            e.preventDefault();
           // console.log('ready to publish')
           createBlog(formData, token).then(data => {
            if(data.error){
                setValues({...values,error:data.error})
                // console.log('error macha')
            }
                else{
                        setValues({...values,title:'' ,error:'', success:' Blog was Published 
                        successfully '})
                        setBody('')
                        setCategories([]);
                        setTags([])
                    }
            })
    }



    const createBlogForm = () => {
        return <form onSubmit= { publishBlog }>
                <div className="form-group">
                        <label className="text-muted"> Title </label>
                        <input type="text" className="form-control" 
                             value= { title }   onChange={handleChange('title')} ></input>
                </div>

            <div className="form-group">
                <ReactQuill style={{height:'30rem',marginBottom:'8rem'}} value={body} 
                        placeholder="Write here, minimum of 200 charaters is required"
                 modules={CreateBlog.modules} formats={ CreateBlog.formats }  onChange={ handleBody } >
                </ReactQuill>
            </div>

            <div className="form-group">
                <button type="submit" className="btn btn-primary" > Publish </button>
            </div><br></br>

        </form>
    }

    const showError = () => (
        <div className="alert alert-danger" style={{display : error ? '' : 'none'}}> {error} </div>
    )

    const showSuccess = () => (
        <div className="alert alert-success" style={{display : success ? '' : 'none'}}> {success} </div>
    )


    return (
        <div className="container-fluid">
              <div className="row">
                    <div className="col-md-8">
                    { createBlogForm() }
                    <div>
                        {showError()}
                        {showSuccess()}
                    </div>
                    </div>
          
              <div className="col-md-4">
                    <div className="form-group pb-2">
                          <h5>Featured Image</h5>
                                <hr></hr>
                        <small className="text-muted">Max.size upto 2mb</small><br></br>
                         <label className="btn btn-outline-info">
                                    Upload Featured Image
                         <input onChange={handleChange('photo')} type="file" accept="image/*" hidden></input>
                        </label>

                 </div>

                    </div>
              </div>
        </div>
        
    )
}


CreateBlog.modules = {
    toolbar : [
            [{ header:'1' }, {header:'2'}, {header:[3,4,5,6] } , {font:[]} ],
            [{ size:[] }],
            ['bold','italic','underline','strike','blockquote'],
            [{ list:'ordered' }, {list:'bullet'},{'indent': '-1'}, {'indent': '+1'} ],
            [{ align: '' }, { align: 'center' }, { align: 'right' }, { align: 'justify' }],
            ['link','image','video'],
            ['clean'],
            ['code-block']
    ]
};


CreateBlog.formats = [
      'header',
      'font',
      'size',
      'bold',
      'italic',
      'underline',
      'strike',
      'blockquote',
      'list',
      'bullet',
      'indent',
      'align',
      'link',
      'image',
      'video',
      'code-block',
];




export default withRouter(CreateBlog);


据我尝试过,图像调整模块 https://www.npmjs.com/package/quill-image-resize-module-react无法与 Nextjs 的样板一起使用,并且样式本身在显示内容时不会注册。您需要弹出样板或使用 webpack。

我更喜欢您使用 SunEditor 作为 React 富文本编辑器,它与 Nextjs 配合得非常好。SunEditor github 链接 https://github.com/mkhstar/suneditor-react。您只需在 _document.js 或 _app.js 中全局导入样式表。

您可以看到demo http://suneditor.com/ here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在react-quill中注册对齐样式 的相关文章

随机推荐

  • 虚拟地址何时分配给程序/进程?

    对于许多人来说 这可能听起来很愚蠢的问题 但我想对这个主题有清楚的了解 例如 当我们在linux ubuntu x86 上构建C程序时 成功编译和链接过程后会生成a out a out 包含什么类型的地址 是虚拟地址吗 如果不是 那么虚拟地
  • 将富文本添加到 iTextSharp 中的 AcroField

    我需要使用 iTextSharp 将一些格式化文本添加到 PDF 表单字段 但我似乎无法弄清楚 这就是我当前设置字段的方式 但插入文本的某些部分需要加粗或具有其他格式 stamper AcroFields SetField fieldNam
  • logcat 中出现数百个随机错误

    当我处理我的项目时 我在 logcat 中遇到了一个奇怪的错误 这些错误不断出现 我可以在 logcat 中感受到 马车轮 效应 错误是 2019 01 03 17 08 11 545 20877 20877 E HotwordDetect
  • OSError: [WinError 10038] 尝试对非套接字的操作

    我正在这里测试客户端方案 服务器和客户端使用相同的端口9009进行连接 不知怎的 下面的代码给了我 OSError 如标题中所写 import sys import socket import select def chat client
  • Firebase JavaScript SDK - 检索用户 IP 地址

    假设我的浏览器脚本自动匿名登录任何用户 是否可以收集用户的公共 IP 地址 我找到了firebase auth currentUser metadata财产 但它只包括LastSignInTime and creationTime 用户公共
  • 如何在 codemirror 编辑器中使用 cypress .type() 进行输入?

    我正在写一些cypress测试 Codemirror 编辑器 我有用cypress在输入字段中键入 我正在努力实现cy type 在 CodeMirror 编辑器中 我在 codemirror 中的数据位于范围内 pre class Cod
  • Kivy Spinner:从 Spinner 中选择一个值时触发的任何事件

    我介绍一个Spinner在我的小部件中 每次我从中选择不同的值时 我都想执行一些操作 是否可以 我似乎只收到事件on press and on release 但是当选择不同的值时它们不会被触发 此致 Bojan 因为每次 attr val
  • 如何区分我自己的类和 gem 的类

    我有一个 Rails 项目 我已经研究了一段时间了 像许多 Rails 项目一样 我有一个 User 类 在我的一个控制器中 我需要从我正在使用的 gem 访问一些方法 gem 中的示例代码演示了如何使用包含到特定 gem 模块 我不会在这
  • PGAdmin - 为什么数据库限制(和高级属性)被禁用?

    我希望限制在浏览器树 层次结构中看到的数据库数量 因为它是一个拥有数百个数据库的 AWS 服务器 基于这个答案 https stackoverflow com questions 12663639 how to hide databases
  • 春季时间表 - 每月最后一天不工作

    我想在 每月最后一天 10 15 和 每月第一个星期日 运行春季调度程序作业 我在下面尝试过 但在初始化 spring 上下文时出现错误 org springframework boot SpringApplication 应用程序启动失败
  • Excel:SUMPRODUCT 计算共享工作负载(以小时为单位)和百分比

    我要再问一个问题 Excel 带百分比的 SUMPRODUCT https stackoverflow com questions 71080332 excel sumproduct with percentages 没有以另一种方式解决
  • 如何修复curl 56 GnuTLS接收错误(-110):TLS连接未正确终止[重复]

    这个问题在这里已经有答案了 同样的问题 git 错误 RPC 失败 curl 56 GnuTLS 接收错误 110 https stackoverflow com questions 50813406 and 错误 RPC 失败 curl
  • Github 页面上的 Angular 4 应用程序

    我有一个简单的Angular 4 我想要托管的应用程序Github Pages 执行此操作的选项来自Angular CLI似乎已删除 有没有办法做到这一点 如果有的话怎么办 这是我的 package json name e portfoli
  • Javascript 抓取 document.URL 的最后一部分? [复制]

    这个问题在这里已经有答案了 我试图获取当前网址的最后一部分 URL http example com test action http example com test action 我正在努力抓住 行动 URL 在该结构中始终保持一致 但
  • 将值从 HTML 传递到 CSS

    我感兴趣是否可以将值从 html 传递给 css 类 像这样 例子 div class Some text div style mt mpx margin top mpx px 我听说这种方式在 Less 中是可能的 不 你想要的方式在 C
  • ConnectivityManager 在获取网络信息时崩溃

    我是 Android 新手 当我给出以下代码片段时 我的 Android 应用程序崩溃了 ConnectivityManager manager ConnectivityManager this getSystemService Conte
  • 如何在 Nexmo 中向美国号码发送文本

    向菲律宾发送信息非常简单 但在美国的数字中 我必须进行验证 但我不知道如何进行 我开始了2F认证 但似乎我不知道下一步该怎么做 我的问题 如何在 Nexmo 中添加发送文本到美国号码 对于美国 您必须从您的 nexmo 帐户创建一个短代码
  • 来自本地 json 变量的 d3 饼图

    我正在尝试使用我见过的局部变量 而不是外部文件 中的 json 创建一个圆环图这个帖子 https stackoverflow com questions 10934853 d3 js loading json without a http
  • 由于格式不正确,加载程序集失败

    我开发了一个相当大的 Windows Forms net C 应用程序 其中包含多个程序集 最初 每个程序集都是为目标平台 任何 CPU 构建的 由于 x64 机器上的 Crystal Reports 存在问题 我们必须为 x86 目标平台
  • 如何在react-quill中注册对齐样式

    我在用着反应鹅毛笔 https www npmjs com package react quillnpm 包并在 nextjs 中动态导入它 我还使用 create next app 样板 我能够让反应鹅毛笔编辑器工作 但是 我无法获取使用