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)