# #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 })}
я назвал значение поля «тест» вместо «содержимое», и это вызвало проблему, потому что не было поля «тест», которое нужно было обновить. Надеюсь, кто-нибудь сочтет это полезным