0

i am creating a blog pannel where user can writte blogs and store the blog in firebase but when i update the state with usestate hook the quill edtior stop showing the container and toolbar div are removed from there

type hereimport React, { Component, useEffect } from "react";
import ReactQuill, { Quill } from "react-quill";
import ImageUploader from "quill-image-uploader";
import "react-quill/dist/quill.snow.css";
 import { Link, useNavigate, useNavigation } from "react-router-dom";
 import { useState,memo } from "react";
  import { useDispatch, useSelector } from "react-redux";
import { setBlog } from "../../store/services/BlogSlice";
 Quill.register("modules/imageUploader", ImageUploader);
// import {TitleB,CategoryB,ContentB,BannerImageB} from"../../store/services/BlogSlice"
 const BlogEditor = memo(props => {
 const dispatch=useDispatch();
  const value = useSelector((state)=>state.blog)
  console.log("value",value);
  const [bannerImage,setBannerImage] = useState('');
  const [category,setCategory] = useState('');
  const [title,setTitle] = useState('');
  const [editorHtml,setEditorHtml] = useState('');
  const navigate = useNavigate()
    const update=()=>{
    dispatch(setBlog({
      TitleB:title,
      ContentB:editorHtml,
      BannerImageB:bannerImage,
      CategoryB:category
    }))

    console.log("Title: ", title);
    console.log("Category: ", category);
    console.log("Banner Image: ", bannerImage);
    console.log("Editor HTML: ", editorHtml);

    navigate('/prev')
 

alert("update succefully")

   }
 
 
 const handleChange=(html)=>{
 setEditorHtml(html);
 return
  }

  const handleTitleChange=(event)=> {
  setTitle(event.target.value);
  }

 const handleCategoryChange=(event)=> {
  setCategory(event.target.value);
  }

 const  handleBannerImageChange=(event)=> {
    const file = event.target.files[0];
    const formData = new FormData();
    formData.append("image", file);
  
    fetch(
      "https://api.imgbb.com/1/upload?key=334ecea9ec1213784db5cb9a14dac265",
      {
        method: "POST",
        body: formData,
      }
    )
      .then((response) => response.json())
      .then((result) => {
        console.log(result);
        setBannerImage(result.data.url);      })
      .catch((error) => {
        console.error("Error:", error);
      });
  }


  const handleSubmit=(event)=> {
    event.preventDefault();

    console.log("Title: ", title);
    console.log("Category: ", category);
    console.log("Banner Image: ", bannerImage);
    console.log("Editor HTML: ", editorHtml);
  }

 const  modules = {
    toolbar: [
      [{ header: [1, 2, false] }],
      ["bold", "italic", "underline", "strike", "blockquote"],
      [
        { list: "ordered" },
        { list: "bullet" },
        { indent: "-1" },
        { indent: "+1" },
      ],
      ["link", "image"],
      ["clean"],
    ],
    imageUploader: {
      upload: (file) => {
        return new Promise((resolve, reject) => {
          const formData = new FormData();
          formData.append("image", file);

          fetch(
            "https://api.imgbb.com/1/upload?key=334ecea9ec1213784db5cb9a14dac265",
            {
              method: "POST",
              body: formData,
            }
          )
            .then((response) => response.json())
            .then((result) => {
              console.log(result);
              resolve(result.data.url);
            })
            .catch((error) => {
              reject("Upload failed");
              console.error("Error:", error);
            });
        });
      },
    },
  };

 const  formats = [
    "header",
    "bold",
    "italic",
    "underline",
    "strike",
    "blockquote",
    "list",
    "bullet",
    "indent",
    "link",
    "image",
    "imageBlot",
  ];

  
     
    return (<>
      <form onSubmit={handleSubmit}>
        <div>
          <label>Title:</label>
          <input type="text" value={ title} onChange={e=> setTitle(e.target.value)} />
        </div>
        <div>
          <label>Category:</label>
          <input type="text" value={ category} onChange={handleCategoryChange} />
        </div>
        <div>
          <label>Banner Image:</label>
          <input type="file" onChange={handleBannerImageChange} />
        </div>
        {/* <div dangerouslySetInnerHTML={{ __html:  editorHtml }} /> */}

<div style={{
            minHeight: "500px",
          }}>
        <ReactQuill
          onChange={handleChange}
          theme="snow"
          
          modules={modules}
          formats={formats}
         />
         </div>

        <button  className="su" type="submit">Submit</button>
      </form>
      <button  className="su" onClick={update}>update</button>
    </>
       );
  
})
  export default   BlogEditor;

i just want to store the data in firebase that i can easly asses the data(image) in other project but the richtext editior stop showing after i set the state of the input field

0 Answers0