【发布时间】:2026-01-30 12:35:01
【问题描述】:
我正在尝试使用 React.js 和钩子来检索和过滤 JSON 数据,但我无法找到任何好的方法来做到这一点。刚才我有我的JSON数据本地,所以它不是来自restAPI或类似的(现在)......我试图创建一个带有按钮的菜单,当我点击它们时,我会得到过滤的数据。我知道...做起来应该不是很困难(因为我已经以一种非常基本的方式来做一个条件,根据某个属性是否为真显示不同的图标。)但无论如何我都在努力解决它。
这是我的代码:
import React, {setState, useState} from 'react';
export const ByCourse = () => {
const projects = window.projects.aaData;
console.log('window.projects = ', projects);
return (
<div className="section-component">
<h2 className="mt-2 mb-4">By Course</h2>
<ul className="nav nav-tabs">
<li className="nav-item">
<a className="nav-link active" href="#">
All
</a>
</li>
<li className="nav-item">
<a className="nav-link" href="#">
Favorite
</a>
</li>
<li className="nav-item">
<a className="nav-link" href="#">
Recent
</a>
</li>
<li className="nav-item">
<a className="nav-link" href="#">
Assigned
</a>
</li>
</ul>
<div className="container">
{projects.map(project => {
return(
<div className="row">
<div className="w-100">
<div className="d-flex border mt-1 mb-1 p-3">
<div className="col-1">
{project.favorite ? <i className="fa fa-star"></i> : <i className="fa fa-star-o"></i>}
</div>
<div className="col-11">
<div className="font-weight-bold"> {project.projectTitle}</div>
<div className="font-weight-normal"> {project.ouName}</div>
</div>
</div>
</div>
</div>
)})}
</div>
</div>
);};
我的数据如下所示:
projects = {"aaData":
[
{
"index":0,
"projectTitle":"123",
"userTitle":"VVS-teknik grund",
"ouName":"fertest1",
"orgUnitId":1022,
"projectId":2014,
"favorite":false,
"recent":false,
"userAssigned":false,
"projectStatus":"ACTIVE",
"viewLink":"http://xxxxxx
},
{
"index":1,
"projectTitle":"AAA",
"userTitle":"AAA",
"ouName":"fertest1",
"orgUnitId":1022,
"projectId":2002,
"favorite":false,
"recent":true,
"userAssigned":false,
"projectStatus":"ACTIVE",
"viewLink":"http://xxxxxx
},
{
"index":2,
"projectTitle":"Activity with image and text",
"userTitle":"asdas",
"ouName":"ferfer AB",
"orgUnitId":1004,
"projectId":1892,
"favorite":false,
"recent":false,
"userAssigned":true,
"projectStatus":"NEW",
"viewLink":"http://xxxxxx"
}]
我尝试使用此处的解决方案:Filtering JSON results in categories - React Hooks 但我得到一个 WEBPACK_1 错误并且无法修复它......
我在这里也做了一个非常基本的过滤:
{project.favorite ? <i className="fa fa-star"></i> : <i className="fa fa-star-o"></i>}
基本上我要找的是:
如果属性 "favorite" 为 true -> 显示带有 attr favorite true 的结果 别的 如果属性 "recent" 为 true -> 仅显示属性最近 == true 的结果 非常感谢您,非常欢迎您提供任何帮助。
【问题讨论】:
-
只需使用
Array.filter -
好吧!我要去看看! :)
-
projects.filter(....).map(...)
-
正确的方法是在地图内查看
-
如果需要在状态变化后显示,则需要将map和filter结合起来,命名为
Array.reduce
标签: javascript reactjs react-hooks