尝试使用 update() 更新 firebase 文档,但不更新文档
trying to update a firebase document with update() but it not updating the document
我正在尝试创建一个博客。我正在研究编辑 post 功能。当我调用 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 (
<>
<AuthCheck>
<PostManager />
</AuthCheck>
</>
);
}
const PostManager = () => {
const [preview, setPreview] = useState(false);
const router = useRouter();
const { slug } = router.query;
const postRef = firestore.collection("blogs").doc(slug);
const [post] = useDocumentData(postRef);
return (
<>
<div className="container">
{post && (
<>
<section>
<h1>{post.title}</h1>
<h4>{post.slug}</h4>
<Postform
postRef={postRef}
defaultValues={post}
preview={preview}
/>
</section>
<aside>
<h3>Tools</h3>
<button onClick={() => setPreview(!preview)}>
{preview ? "Edit" : "Preview"}
</button>
<Link href={`/${post.slug}`}>
<button className="btn btn-secondary">Live view</button>
</Link>
{/* <DeletePostButton postRef={postRef} /> */}
</aside>
</>
)}
</div>
</>
);
};
const Postform = ({ postRef, defaultValues, preview }) => {
const { register, handleSubmit, reset, watch } = useForm({
defaultValues,
mode: "onChange",
});
const updatePost = async ({ content, published }) => {
await postRef.update({
content,
published,
});
reset({ content, published });
toast.success("Post updated successfully!");
};
return (
<form onSubmit={handleSubmit(updatePost)}>
{preview && (
<div className="card">
<ReactMarkdown>{watch("content")}</ReactMarkdown>
</div>
)}
<div className={preview ? `d-none`:``}>
<textarea
className='form-control'
name="content"
{...register("test", { required: true })}
></textarea>
<fieldset>
<input
className="form-check-input"
name="published"
type="checkbox"
{...register("test", { required: true })}
/>
<label>Published</label>
</fieldset>
<button type="submit" className="btn btn-secondary">
Save Changes
</button>
</div>
</form>
);
};
在这里,当我提交表单时,弹出窗口说更新成功,但是当我检查数据库时,没有任何变化。这是一个示例图片
好的,所以我找到了问题所在。
所以事情是我正在学习一个教程,而他正在使用 6.X.X 这是过时的版本。所以我去互联网试图找到一个解决方案并复制粘贴一行 cide 这是 {...register("test", { required: true })}
在这里我将字段值命名为 'test' 而不是 'content' 这就是导致问题的原因因为没有要更新的 'test' 字段。希望有人觉得这有帮助
我正在尝试创建一个博客。我正在研究编辑 post 功能。当我调用 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 (
<>
<AuthCheck>
<PostManager />
</AuthCheck>
</>
);
}
const PostManager = () => {
const [preview, setPreview] = useState(false);
const router = useRouter();
const { slug } = router.query;
const postRef = firestore.collection("blogs").doc(slug);
const [post] = useDocumentData(postRef);
return (
<>
<div className="container">
{post && (
<>
<section>
<h1>{post.title}</h1>
<h4>{post.slug}</h4>
<Postform
postRef={postRef}
defaultValues={post}
preview={preview}
/>
</section>
<aside>
<h3>Tools</h3>
<button onClick={() => setPreview(!preview)}>
{preview ? "Edit" : "Preview"}
</button>
<Link href={`/${post.slug}`}>
<button className="btn btn-secondary">Live view</button>
</Link>
{/* <DeletePostButton postRef={postRef} /> */}
</aside>
</>
)}
</div>
</>
);
};
const Postform = ({ postRef, defaultValues, preview }) => {
const { register, handleSubmit, reset, watch } = useForm({
defaultValues,
mode: "onChange",
});
const updatePost = async ({ content, published }) => {
await postRef.update({
content,
published,
});
reset({ content, published });
toast.success("Post updated successfully!");
};
return (
<form onSubmit={handleSubmit(updatePost)}>
{preview && (
<div className="card">
<ReactMarkdown>{watch("content")}</ReactMarkdown>
</div>
)}
<div className={preview ? `d-none`:``}>
<textarea
className='form-control'
name="content"
{...register("test", { required: true })}
></textarea>
<fieldset>
<input
className="form-check-input"
name="published"
type="checkbox"
{...register("test", { required: true })}
/>
<label>Published</label>
</fieldset>
<button type="submit" className="btn btn-secondary">
Save Changes
</button>
</div>
</form>
);
};
在这里,当我提交表单时,弹出窗口说更新成功,但是当我检查数据库时,没有任何变化。这是一个示例图片
好的,所以我找到了问题所在。
所以事情是我正在学习一个教程,而他正在使用 6.X.X 这是过时的版本。所以我去互联网试图找到一个解决方案并复制粘贴一行 cide 这是 {...register("test", { required: true })}
在这里我将字段值命名为 'test' 而不是 'content' 这就是导致问题的原因因为没有要更新的 'test' 字段。希望有人觉得这有帮助