reactjs - React - Firebase - 显示单个帖子
问题描述
Firebase 相当新。我创建了一个页面,显示所有帖子,如下所示:
import React, { useState, useEffect } from "react";
import { db } from "../firebase";
import { Link } from "react-router-dom";
function Fire() {
function useCourses() {
const [courses, setCourses] = useState([]);
useEffect(() => {
const unsubscribe = db
.collection("courses")
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
const newCourses = snapshot.docs.map((doc) => ({
id: doc.id,
...doc.data(),
}));
setCourses(newCourses);
});
})
.catch((e) => {
console.log(e);
});
return () => unsubscribe();
}, []);
return courses;
}
const courses = useCourses();
return (
<div className="courses">
<ul className="courses__list">
{courses.map((course) => (
<li
className="course"
key={course.id}
style={{
backgroundImage: `url(${course.image})`,
}}
>
<h3>
<Link to={`/courses/${course.id}`} className="course__title">
{course.title}
</Link>
</h3>
</li>
))}
</ul>
</div>
);
}
export default Fire;
然后我有一个页面来显示单个帖子,如下所示:
import React, { useState, useEffect } from "react";
import { db } from "../firebase";
function CourseDetail() {
const [title, setTitle] = useState("");
const [text, setText] = useState("");
useEffect(() => {
const single = db
.collection("courses")
.doc("329ddd70-c9bd-11ea-a9d4-39439f5f6cce");
single
.get()
.then(function (doc) {
if (doc.exists) {
let { title, main_text } = doc.data();
setTitle(title);
setText(main_text);
}
})
.catch(function (error) {
console.log("Error getting document:", error);
});
}, []);
return (
<div>
<h3>{title}</h3>
<p>{text}</p>
</div>
);
}
export default CourseDetail;
当我将特定的 id 放入 .doc() 时,它工作正常。我的问题是如何传递 idLink
以显示来自特定帖子的数据(路由器和链接工作正常)。提前致谢。
解决方案
您在链接中正确发送了帖子的 ID
<Link to={`/courses/${course.id}`} >
在用于显示单个帖子的组件中,您可以使用检索此 IDuseParams
import { useParams } from "react-router-dom";
const { courseId } = useParams();
同样在您的路线中,您应该配置接受 courseId 的路径
<Route path="/courses/:courseId" component={CourseDetail} />
推荐阅读
- mongodb - (如何)聚合()可以破坏索引?
- macos - 奇怪的目录被添加到我的 PATH
- excel - VBA 在 Excel 中的 Word 文档中创建报告
- python - 输出视频与原始视频不同 Open CV
- ios - 仅在滚动时,iFrame 中的延迟加载页面在 iOS 设备上(垂直)被切断
- pandas - Pandas:仅将列中的某些字符串大写
- g1ant - 带有参数相对真或相对假的颜色命令输出?
- android - Android Firebase addOnChildListener 致命异常“打印需要消息”并且没有设置器/字段
- python - Python numpy 数组切片不是 Fortran 连续的
- google-apps-script - 当NumberLessThan 无法引用单元格时,Google Apps 脚本条件格式