Hosting the TinyMCE package with the React framework

The Official TinyMCE React component integrates TinyMCE into React projects. This procedure creates a basic React application containing a TinyMCE editor.

For examples of the TinyMCE integration, visit the tinymce-react storybook.

Prerequisites

This procedure requires Node.js (and npm).

Procedure

  1. Use the Create React App package to create a new React project named tinymce-react-demo.

    npx create-react-app tinymce-react-demo
  2. Change to the newly created directory.

    cd tinymce-react-demo
  3. Install the tinymce, tinymce-react and fs-extra packages and save them to your package.json with --save.

    npm install --save tinymce @tinymce/tinymce-react fs-extra
  4. Setup a postinstall script to copy TinyMCE to the public directory for hosting

    postinstall.js
    const fse = require('fs-extra');
    const path = require('path');
    const topDir = __dirname;
    fse.emptyDirSync(path.join(topDir, 'public', 'tinymce'));
    fse.copySync(path.join(topDir, 'node_modules', 'tinymce'), path.join(topDir, 'public', 'tinymce'), { overwrite: true });
    package.json
    {
      // ... other content omitted for brevity ...
      "scripts": {
        // ... other scripts omitted for brevity ...
        "postinstall": "node ./postinstall.js"
      }
    }
    .gitignore
    # ... other rules omitted for brevity ...
    /public/tinymce/
  5. Run the postinstall to copy TinyMCE to the public directory

    npm run postinstall
  6. Using a text editor, open ./src/App.js and replace the contents with:

    import React, { useRef } from 'react';
    import { Editor } from '@tinymce/tinymce-react';
    
    export default function App() {
      const editorRef = useRef(null);
      const log = () => {
        if (editorRef.current) {
          console.log(editorRef.current.getContent());
        }
      };
      return (
        <>
          <Editor
            tinymceScriptSrc={process.env.PUBLIC_URL + '/tinymce/tinymce.min.js'}
            onInit={(evt, editor) => editorRef.current = editor}
            initialValue='<p>This is the initial content of the editor.</p>'
            init={{
              height: 500,
              menubar: false,
              plugins: [
                'advlist', 'autolink', 'lists', 'link', 'image', 'charmap',
                'anchor', 'searchreplace', 'visualblocks', 'code', 'fullscreen',
                'insertdatetime', 'media', 'table', 'preview', 'help', 'wordcount'
              ],
              toolbar: 'undo redo | blocks | ' +
                'bold italic forecolor | alignleft aligncenter ' +
                'alignright alignjustify | bullist numlist outdent indent | ' +
                'removeformat | help',
              content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }'
            }}
          />
          <button onClick={log}>Log editor content</button>
        </>
      );
    }
  7. Test the application using the Node.js development server.

    • To start the development server, navigate to the tinymce-react-demo directory and run:

      npm run start
    • To stop the development server, select on the command line or command prompt and press Ctrl+C.

Deploying the application to a HTTP server

The application will require further configuration before it can be deployed to a production environment. For information on configuring the application for deployment, see: Create React App - Deployment.

To deploy the application to a local HTTP Server:

  1. Navigate to the tinymce-react-demo directory and run:

    npm run build
  2. Copy the contents of the tinymce-react-demo/build directory to the root directory of the web server.

The application has now been deployed on the web server.

Additional configuration is required to deploy the application outside the web server root directory, such as http://localhost:<port>/my_react_application.

Next Steps