попытка обновить документ firebase с помощью update (), но он не обновляет документ

# #javascript #firebase #google-cloud-firestore #next.js #react-hook-form

Вопрос:

я пытаюсь завести блог. Я работаю над функцией редактирования поста. Когда я звоню ref.update() , он говорит, что обновление сработало, но в базе данных ничего не изменилось в следующем коде.

Код

 import AuthCheck from "../../components/AuthCheck"; import { firestore } from "../../lib/firebase"; import { useDocumentData } from "react-firebase-hooks/firestore"; import { useState, useEffect } from "react"; import { useRouter } from "next/router"; import { useForm } from "react-hook-form"; import toast from "react-hot-toast"; import ReactMarkdown from "react-markdown"; import Link from "next/link";  export default function Editposts({}) {  return (  lt;gt;  lt;AuthCheckgt;  lt;PostManager /gt;  lt;/AuthCheckgt;  lt;/gt;  ); }  const PostManager = () =gt; {  const [preview, setPreview] = useState(false);  const router = useRouter();  const { slug } = router.query;  const postRef = firestore.collection("blogs").doc(slug);  const [post] = useDocumentData(postRef);   return (  lt;gt;  lt;div className="container"gt;  {post amp;amp; (  lt;gt;  lt;sectiongt;  lt;h1gt;{post.title}lt;/h1gt;  lt;h4gt;{post.slug}lt;/h4gt;  lt;Postform  postRef={postRef}  defaultValues={post}  preview={preview}  /gt;  lt;/sectiongt;  lt;asidegt;  lt;h3gt;Toolslt;/h3gt;  lt;button onClick={() =gt; setPreview(!preview)}gt;  {preview ? "Edit" : "Preview"}  lt;/buttongt;  lt;Link href={`/${post.slug}`}gt;  lt;button className="btn btn-secondary"gt;Live viewlt;/buttongt;  lt;/Linkgt;  {/* lt;DeletePostButton postRef={postRef} /gt; */}  lt;/asidegt;  lt;/gt;  )}  lt;/divgt;  lt;/gt;  ); };  const Postform = ({ postRef, defaultValues, preview }) =gt; {  const { register, handleSubmit, reset, watch } = useForm({  defaultValues,  mode: "onChange",  });   const updatePost = async ({ content, published }) =gt; {  await postRef.update({  content,  published,  });   reset({ content, published });   toast.success("Post updated successfully!");  };   return (  lt;form onSubmit={handleSubmit(updatePost)}gt;  {preview amp;amp; (  lt;div className="card"gt;  lt;ReactMarkdowngt;{watch("content")}lt;/ReactMarkdowngt;  lt;/divgt;  )}   lt;div className={preview ? `d-none`:``}gt;  lt;textarea  className='form-control'  name="content"  {...register("test", { required: true })}  gt;lt;/textareagt;   lt;fieldsetgt;  lt;input  className="form-check-input"  name="published"  type="checkbox"  {...register("test", { required: true })}  /gt;  lt;labelgt;Publishedlt;/labelgt;  lt;/fieldsetgt;   lt;button type="submit" className="btn btn-secondary"gt;  Save Changes  lt;/buttongt;  lt;/divgt;  lt;/formgt;  ); };   

здесь, когда я отправляю форму, всплывающее окно сообщает, что обновление прошло успешно, но когда я проверяю базу данных, ничего не изменилось. Вот пример изображения

база огня и блог открылись бок о бок

Комментарии:

1. Вы проверяли, используете ли вы эмулятор Firestore во время тестирования? Возможно, он записывает его туда вместо производственной базы данных.

2. как я могу это проверить?

Ответ №1:

Хорошо, итак, я выясняю проблему. итак, дело в том, что я следовал учебнику, а он использовал 6.X.X, который является устаревшей версией. Поэтому я пошел в Интернет, пытаясь найти решение, и скопировал вставленную строку cide, в которой {...register("test", { required: true })} я назвал значение поля «тест» вместо «содержимое», и это вызвало проблему, потому что не было поля «тест», которое нужно было обновить. Надеюсь, кто-нибудь сочтет это полезным