質問するログイン新規登録

Q&A

0回答

852閲覧

Editor.jsで改行を保存したい

Boson328

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2023/01/01 03:30

編集2023/01/01 04:14

0

1

前提

ReactとJavascriptとEditor.jsでNotionのようなノートアプリを作ろうと思っているのですが、save()をした際に詰まったので質問させてください。

生じた問題

文字が書かれていない場合にそのブロックが保存されません。コンソールには

editor.js:2 [Editor.js saving]: editor.js:2 Paragraph editor.js:2 Block «paragraph» skipped because saved data is invalid

と表示されます。

別のWYSIWIGを使うことも検討しています。

試したこと

save()で保存する方法を試しました。

補足情報(FW/ツールのバージョンなど)

Editorjsのバージョンは2.26.4です。
react-editor-jsを使っています。

今のコード

Javascript

1import { createReactEditorJS } from "react-editor-js"; 2import React, { useEffect, useReducer, useState, useRef } from "react"; 3import DragDrop from "editorjs-drag-drop"; 4import { useParams } from "react-router"; 5import Marker from "@editorjs/marker"; 6import Header from "@editorjs/header"; 7import CodeTool from "@editorjs/code"; 8import Quote from "@editorjs/quote"; 9import Embed from "@editorjs/embed"; 10import List from "@editorjs/list"; 11import InlineCode from "@editorjs/inline-code"; 12import Head from "../components/Head"; 13import { db } from "../firebase"; 14 15function NoteApp() { 16 const ReactEditorJS = createReactEditorJS(); 17 const instanceRef = useRef(null); 18 const params = useParams(); 19 console.log(instanceRef); 20 const [note, setNote] = useState(); 21 const [pageTitle, setPagetitle] = useState(); 22 23 const editorCore = React.useRef(null); 24 const handleInitialize = React.useCallback((instance) => { 25 editorCore.current = instance; 26 }, []); 27 28 const handleReady = () => { 29 const editor = editorCore.current._editorJS; 30 new DragDrop(editor); 31 let codexeditor = document.getElementsByClassName("codex-editor"); 32 for (let i = 0; i < codexeditor.length; i++) { 33 codexeditor[i].classList.remove("codex-editor--narrow"); 34 } 35 }; 36 37 const handleSave = React.useCallback(async () => { 38 let savedData = await editorCore.current.save(); 39 console.log(savedData); 40 // ここでFirestoreにデータを格納 41 db.collection("workspaces") 42 .doc(params.workspace) 43 .collection("projects") 44 .doc(params.project) 45 .collection("note") 46 .doc(document.getElementById("textedit").className) 47 .update({ note: savedData }); 48 }, []); 49 50 useEffect(() => { 51 // ここでFirestoreからデータを取得 52 db.collection("workspaces") 53 .doc(params.workspace) 54 .collection("projects") 55 .doc(params.project) 56 .collection("note") 57 .doc(params.page) 58 .get() 59 .then((snapshot) => { 60 console.log(snapshot.data()); 61 setNote([]); 62 setNote(snapshot.data().note); 63 }); 64 db.collection("workspaces") 65 .doc(params.workspace) 66 .collection("projects") 67 .doc(params.project) 68 .collection("note") 69 .doc(params.page) 70 .onSnapshot((snapshot) => { 71 setPagetitle(snapshot.data().title); 72 }); 73 }, [params]); 74 75 useEffect(async () => { 76 var noteDoc = await db 77 .collection("workspaces") 78 .doc(params.workspace) 79 .collection("projects") 80 .doc(params.project) 81 .collection("note") 82 .doc(params.page) 83 .get(); 84 if (!noteDoc.exists) { 85 window.location.href = "/app/" + params.workspace + "/" + params.project; 86 } 87 }, []); 88 89 return ( 90 <div id="app" className={localStorage.getItem("handleBanner")}> 91 {console.log(note)} 92 <div id="textedit" className={params.page}> 93 {note == undefined ? ( 94 <Head title="Newtron" /> 95 ) : ( 96 <> 97 <ReactEditorJS 98 instanceRef={(instance) => (instanceRef.current = instance)} 99 onReady={handleReady} 100 onInitialize={handleInitialize} 101 placeholder="何か入力" 102 onChange={handleSave} 103 value={note} 104 defaultValue={note} 105 autofocus="true" 106 defaultBlock="paragraph" 107 tools={{ 108 marker: Marker, 109 heading: Header, 110 codetool: CodeTool, 111 quote: Quote, 112 embed: Embed, 113 inlinecode: InlineCode, 114 list: List, 115 }} 116 /> 117 </> 118 )} 119 </div> 120 </div> 121 ); 122} 123 124export default NoteApp;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

yuma.inaura

2023/01/01 03:34

今のコードは載せられませんか?
Boson328

2023/01/01 04:19

コードを載せました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問