当前位置: 首页 > news >正文

新版 React19使用 react-quill

 检查 Quill 的版本:

确保你使用的 Quill 版本与 React 19 兼容。有时候,库的更新或补丁版本会解决与新版本 React 的兼容性问题。可以尝试查看 Quill 的 GitHub 仓库或 npm 页面上的 release notes。

npm install quill@latest

如果你需要更复杂的集成或者额外的功能,可以考虑使用 react-quill 这个社区维护的库,它为 Quill 提供了一个更 React 友好的封装。安装和使用方法如下:

npm install react-quill
import React from 'react';
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css'; // 引入主题样式
 
function App() {
  return (
    <div>
      <ReactQuill theme="snow" />
    </div>
  );
}
 
export default App;

新版 React19版本

npm install react-quill-new --save

参考地址:  react-quill-new - npm 

import React, { useState } from 'react';
import ReactQuill from 'react-quill-new';
import 'react-quill-new/dist/quill.snow.css';

function MyComponent() {
  const [value, setValue] = useState('');

  return <ReactQuill theme="snow" value={value} onChange={setValue} />;
}

基本用法

在你的 React 组件中,你可以这样使用 React Quill:

import React, { useState } from 'react';
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css'; // 引入样式文件
 
const EditorComponent = () => {
  const [value, setValue] = useState('');
 
  return (
    <ReactQuill
      theme="snow"
      value={value}
      onChange={setValue}
    />
  );
};
 
export default EditorComponent;

配置模块和工具栏

你可以通过 modules 和 formats 属性来自定义 Quill 的工具栏和功能。例如:

// 配置 Quill 工具栏,添加图片上传按钮
const modules = {
  toolbar: {
    container: [
      [{ 'header': [1, 2, false] }],
      ['bold', 'italic', 'underline', 'strike', 'blockquote'],
      [{'list': 'ordered'}, {'list': 'bullet'}, {'indent': '-1'}, {'indent': '+1'}],
      ['link', 'image'],
      ['clean']
    ],
  },
};
 // 配置 Quill 格式
const formats = [
  'header', 'bold', 'italic', 'underline', 'strike', 'blockquote', 
  'list', 'bullet', 'indent', 'link', 'image'
];
 
<ReactQuill 
  theme="snow" 
  value={value} 
  onChange={setValue} 
  modules={modules} 
  formats={formats} 
/>;
实例:编辑页面 
import React, { useState } from'react';
// import ReactQuill from 'react-quill';
// import 'react-quill/dist/quill.snow.css';
import ReactQuill from 'react-quill-new';
import 'react-quill-new/dist/quill.snow.css';

import { Form, Input, DatePicker, Button } from 'antd'; // 导入 Ant Design 的 Form, Input, DatePicker 和 Button 组件
import 'antd/dist/antd.css';
// 配置 Quill 工具栏,添加图片上传按钮
const modules = {
  toolbar: [
    [{ 'header': [1, 2, false] }],
    ['bold', 'italic', 'underline', 'strike', 'blockquote'],
    [{'list': 'ordered'}, {'list': 'bullet'}, {'indent': '-1'}, {'indent': '+1'}],
    ['link', 'image'],
    ['clean']
  ]
};

// 配置 Quill 格式
const formats = [
  'header', 'bold', 'italic', 'underline', 'strike', 'blockquote',
  'list', 'bullet', 'indent', 'link', 'image'
];

export default function Create() {
  const [title, setTitle] = useState('');
  const [author, setAuthor] = useState('');
  const [date, setDate] = useState(new Date().toISOString().split('T')[0]);
  const [content, setContent] = useState('');

  const handleSubmit = () => {
    // 这里可以添加提交表单数据的逻辑,例如发送到后端 API
    console.log('标题:', title);
    console.log('作者:', author);
    console.log('时间:', date);
    console.log('内容:', content);
  };

  return (
    <div style={{ width: '80%', margin: '0 auto' }}>
      <h1>编辑文章</h1>
      <Form layout="vertical" onFinish={handleSubmit}>
        <Form.Item label="文章标题:" name="title">
          <Input
            value={title}
            onChange={(e) => setTitle(e.target.value)}
          />
        </Form.Item>
        <Form.Item label="作者:" name="author">
          <Input
            value={author}
            onChange={(e) => setAuthor(e.target.value)}
          />
        </Form.Item>
        <Form.Item label="时间:" name="date">
          <DatePicker
            value={new Date(date)}
            onChange={(date, dateString) => setDate(dateString)}
            format="YYYY-MM-DD"
          />
        </Form.Item>
        <Form.Item label="内容:" name="content">
          <ReactQuill
            value={content}
            onChange={setContent}
            modules={modules}
            formats={formats}
          />
        </Form.Item>
        <Form.Item>
          <Button type="primary" htmlType="submit">
            保存提交
          </Button>
        </Form.Item>
      </Form>
    </div>
  );
}

 

高级用法和 API 文档

对于更高级的用法,如集成到表单中、处理粘贴事件、自定义样式等,你可以查看 GitHub 仓库中的 Issues 和 Pull Requests,或者在 Stack Overflow 等社区中搜索相关的讨论和示例。React Quill 的 GitHub Issues 也是一个很好的资源,你可以在那里找到用户报告的问题和开发者提供的解决方案。

注意事项和最佳实践

  • 确保你引入了 Quill 的 CSS 文件,否则编辑器可能不会显示正确。

  • 使用 onChange 属性来处理文本的变化,这样可以保持状态同步。

  • 根据需要配置 modules 和 formats 以满足你的编辑需求。

  • 对于复杂的编辑器功能,考虑查看 Quill 的官方文档来了解更多可用的模块和配置选项。

相关文章:

  • 基于SpringBoot的图书借阅小程序+LW参考示例
  • mysql实例
  • CES Asia 2025赛逸展:科技浪潮中的创新与商贸盛会
  • 详解c++20的协程,自定义可等待对象,生成器详解
  • 享元模式的原理的详细解析以及使用案例。
  • 架构设计之自定义延迟双删缓存注解(上)
  • 波斯语这种RTL语言的字符串拼接问题
  • NPU上如何使能pytorch图模式
  • 【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2D刚体组件(Rigidbody2D)
  • AWS AI认证考试中经常提及几个重要的工具介绍
  • SSE进阶详解
  • CentOS 7下安装PostgreSQL 15
  • 【Android Studio开发】生命周期、Activity和组件通信(上)
  • Spring——Springcloud/Spring项目加载文件配置顺序
  • .NET三层架构详解
  • 【SpringBoot项目OOM记录及处理】
  • 如何重装windows系统
  • AppInventor2生成3位数的水仙花数
  • Python期末复习题库
  • Android 13系统定制实战:基于系统属性的音量键动态屏蔽方案解析
  • 申伟强任上海申通地铁集团有限公司副总裁
  • 前4个月全国新建商品房销售面积降幅收窄,房地产库存和新开工有所改善
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?
  • 广西桂林、百色、河池等地表态:全力配合中央对蓝天立的审查调查
  • 美国务卿与以色列总理通话,讨论加沙局势
  • 杨建全已任天津市委副秘书长、市委市政府信访办主任