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> ) }
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 /> ) }
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)