【发布时间】:2021-10-02 19:36:44
【问题描述】:
我正在尝试创建一个React.js 博客,所以我有一个easybase.io 数据库来保存我的博客的数据。有一个显示所有帖子的页面,当有人点击帖子时,使用 react-router-dom 包中的 paramas 模块发送帖子 ID。在执行console.log(postid) 时,它显示在控制台中,但是当它通过过滤器时,由于某种原因它不起作用,有什么解释吗?过滤器正在过滤从数据库中选择的所有帖子,并且只返回具有相同 id 的对象。当输入task.id === 1 时,它会返回ID 为1 的对象,但是当在控制台中输入task.id === postid 和postid 等于1 时,它什么也不返回。
所有帖子代码
/* eslint-disable */
import { useEasybase } from "easybase-react";
import React, { useEffect, useState } from "react";
import { useHistory } from "react-router-dom";
export default function BlogPosts() {
let history = useHistory();
const { db } = useEasybase();
const [responseData, setResponse] = useState([]);
async function getPosts() {
const ebData = await db("POSTS").return().all();
setResponse(ebData);
}
useEffect(() => {
getPosts();
}, []);
return (
<>
<div>
{responseData.map((val, key) => {
return (
<div
style={{ border: "1px solid black", margin: "1em 1em" }}
key={key}
onClick={() => {
history.push(`/post/${val.id}`);
}}
>
<h3>{val.title}</h3>
<div dangerouslySetInnerHTML={{ __html: val.post_text }} />
</div>
);
})}
</div>
</>
);
}
打开邮政编码
/* eslint-disable */
import React, { useEffect, useState } from "react";
import { useParams } from "react-router-dom";
import { useEasybase } from "easybase-react";
export default function BlogPosts() {
//testing for the filter function
const tasks = [
{
taskId: 1,
taskName: "Clean the bathroom",
taskStatus: "Complete",
},
{
taskId: 2,
taskName: "Learn filtering data in React",
taskStatus: "To do",
},
{
taskId: 3,
taskName: "Fix the bug on React project",
taskStatus: "To do",
},
{
taskId: 4,
taskName: "Fix the car",
taskStatus: "Complete",
},
];
const [responseData, setResponse] = useState([]);
const [idState, setIdState] = useState(0);
let { postid } = useParams();
const { db } = useEasybase();
async function getPosts() {
const ebData = await db("POSTS").return().all();
setResponse(ebData);
console.log(ebData);
}
useEffect(() => {
getPosts();
setIdState(postid);
console.log(postid);
}, []);
return (
<>
<div style={{ justifyContent: "center", alignContent: "center" }}>
{tasks
.filter((task) => task.taskStatus === "To do")
.map((task) => (
<li key={task.taskId}>{task.taskName}</li>
))}
{responseData
.filter((task) => task.id === postid)
.map((task) => (
<li key={task.id}>{task.title}</li>
))}
</div>
</>
);
}
【问题讨论】:
-
尝试 == 而不是 ===
-
@MiladRaeisi 除非你知道确切为什么要使用
==,否则你永远不应该使用它。如果您的代码不适用于===,请修复导致相等检查的代码,不要通过让 JS 执行类型强制来“解决”它。 -
task.id === postid,应该是taskId === postid
-
@Mike'Pomax'Kamermans 我不是说在你的代码上放错误,我只是说试试看是否是问题,最好将字符串转换为整数,但首先找到问题。哦,看,你应该说 task.taskId 而不是 task.id
-
这不是你说的,你使用了三个词和两个运算符:如果你推荐一个反模式,多说一点总是一个好主意 =)
标签: javascript arrays reactjs object filter