javascript - TinyMCE 自托管 React

标签 javascript reactjs webpack tinymce

我正在尝试使用 react 创建一个简单的自托管 TinyMCE。目前我的项目只是显示一个简单的文本区域,没有工具栏或任何样式。我认为集成tinymce 的一个好方法是使用模块加载器。我读到 react 已经通过使用 npx create-react-app 包含 webpack。

Projectstructor
    root
    |-public
    |-skins
    |-src 
       |-App.js
       |-TinyEditorComponent.js
    |-webpack.config.js
我一步一步做了什么:
  • npx 创建 react 应用程序我的应用程序
  • $ npm install --save @tinymce/tinymce-react
  • cp -r node_modules/tinymce/skins 皮肤
  • 创建文件 webpack.config.js

  • const config = {
      module: {
        loaders: [
          {
            test: require.resolve("tinymce/tinymce"),
            loaders: ["imports?this=>window", "exports?window.tinymce"],
          },
          {
            test: /tinymce\/(themes|plugins)\//,
            loaders: ["imports?this=>window"],
          },
        ],
      },
    };
    

    文本编辑器组件:
    import React, { Component } from "react";
    
    // Import TinyMCE
    import tinymce from "tinymce/tinymce";
    
    // Default icons are required for TinyMCE 5.3 or above
    import "tinymce/icons/default";
    
    // A theme is also required
    import "tinymce/themes/silver";
    
    // Any plugins you want to use has to be imported
    import "tinymce/plugins/paste";
    import "tinymce/plugins/link";
    
    class TinyEditorComponent extends Component {
      constructor() {
        super();
        this.state = { editor: null };
      }
    
      componentDidMount() {
        tinymce.init({
          selector: `#${this.props.id}`,
          skin_url: `./skins/content/dark`,
          plugins: [
            "advlist autolink lists link image charmap print preview anchor",
            "searchreplace visualblocks code fullscreen",
            "insertdatetime media table paste code help wordcount",
          ],
          toolbar: "undo redo | formatselect | bold italic backcolor |",
          setup: editor => {
            this.setState({ editor });
            editor.on("keyup change", () => {
              const content = editor.getContent();
              this.props.onEditorChange(content);
            });
          },
        });
      }
    
      componentWillUnmount() {
        tinymce.remove(this.state.editor);
      }
    
      render() {
        return (
          <textarea
            id={this.props.id}
            value={this.props.content}
            onChange={e => console.log(e)}
          />
        );
      }
    }
    
    export default TinyEditorComponent;
    
    我不确定如何为 tinymce 覆盖和配置 webpack,有很多旧方法,但什么是正确的。通过注入(inject) webconfig?

    最佳答案

    理想情况下,您应该使用自己的 ReactComponent。
    这个答案需要来自 https://www.tiny.cloud/docs/integrations/react/ 的知识
    您应该安装组件 @tinymce/tinymce-react通过npmyarn以您的喜好为准。一旦你安装了你导入编辑器

    import { Editor } from '@tinymce/tinymce-react';
    
    然后你可以像这样使用它
    <Editor
        initialValue="<p>This is the initial content of the editor</p>"
        init={{
          height: 500,
          menubar: false,
          plugins: [
            'advlist autolink lists link image charmap print preview anchor',
            'searchreplace visualblocks code fullscreen',
            'insertdatetime media table paste code help wordcount'
          ],
          toolbar:
            'undo redo | formatselect | bold italic backcolor | \
             alignleft aligncenter alignright alignjustify | \
             bullist numlist outdent indent | removeformat | help'
          }}
    />
    
    然后将您的 TinyMCE 自托管副本添加到您的公共(public)文件夹。
    编辑公用文件夹中的 index.html 并在您的 <head> 中添加以下内容标签
    <script src="tinymce.min.js"></script>
    

    关于javascript - TinyMCE 自托管 React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64943901/

    相关文章:

    webpack 2.1.0-beta.25 错误未知属性 postLoaders

    javascript - 样式组件和 Webpack 5 联合模块之间的冲突(无效的钩子(Hook)调用)

    javascript - Node.JS 套接字服务器和同一服务器上的连接速度变慢

    reactjs - 在 react-tabulator 列中正确显示 React 组件

    javascript - 如何使用 jQuery 设置内容高度 – 在小窗口尺寸下 chop

    reactjs - React Router 与相对路径部署

    ios - TabBarIOS UI定制

    webpack - 防止 webpack 运行多个开发服务器套接字

    javascript - 将数组元素复制和复制到新元素的最优化方法

    javascript - 如何将 delay() 与 each() 一起使用?