DEV Community

Cover image for Implementando Editor.js com Next.js utilizando Typescript
Marcelo Albuquerque
Marcelo Albuquerque

Posted on

Implementando Editor.js com Next.js utilizando Typescript

Basicamente o Editor.js é um WYSIWYG editor. Tenho certeza que irá se surpreender com essa solução e ficar ainda mais impressionado sabendo que é gratuíta. E ao meu ver está muito a frente de outras soluções pagas.

Conheça o Editor.js. E também considere fazer uma doação para o projeto. São poucos projetos gratuítos com esse nível de qualidade.

A proposta deste tutorial é mostrar sua implementação com o Next.js utilizando Typescript.

Vamos utilizar o App Router.

Criando o componente Editor

Primeiramente vamos construir um componente que irá exportar uma div onde o Editor.js será renderizado após a tela estar pronta para o usuário.

// components/Editor.tsx

'use client'

import { useRef } from 'react';

import EditorJS from '@editorjs/editorjs'

// Esta função irá garantir que o componente seja renderizado uma única vez
const RenderEditor = ( ElementId: string ) => {
  const rendered = useRef<false | true>( false )

  if ( !rendered.current ) {
    rendered.current = true;

    // Aqui chamamos a execução do EditorJS e também podemos passar os parâmetros necessários para execução
    new EditorJS({
      holder: ElementId
    });
  } else {
    return
  }
}

export default function Editor() {
  const elementId = 'editorjs' // Defina aqui o ID para o elemento onde o Editor.js será renderizado

  RenderEditor( elementId )

  return (
    <div id={ elementId }></div>
  )
}
Enter fullscreen mode Exit fullscreen mode

Importando o Componente

Para importar o componente vamos utilizar o next/dynamic.

Essa implementação se faz necessária para evitar erros na execução do Editor.js, lembrando que oficialmente não existe um componente React, mas podemos construir nosso próprio componente e utilizar sem nenhum problema.

// page.tsx

import dynamic from "next/dynamic";

const Editor = dynamic(() => import("components/Editor"), {
  ssr: false,
  loading: () => <p>Loading ...</p>,
})

export default async function Page() {
 return(
   <Editor />
 )
}
Enter fullscreen mode Exit fullscreen mode

Com essa implementação o Editor.js deverá ser executado sem erros no seu Fron-end.

Gostaria de destacar uma resposta no Stackoverflow que me auxiliou na construção da função que garante que o Editor.js será renderizado uma única vez.

Até mais!!!

Top comments (0)