You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中分类下无项目时,使用map/filter遍历如何正确显示自定义占位内容?

解决Map/Filter无匹配项时展示单条提示的问题

嘿,这个问题我太熟悉啦!咱们先拆解下你遇到的问题:最开始用map的时候,每遇到一个不匹配当前分类的项目,就会返回一个<p>none</p>,所以才会出现满屏的none——这显然不是你想要的效果。

你转向用filter的思路完全正确!接下来只需要多一步判断,就能实现“无匹配时仅显示一次none”的需求,具体做法如下:

步骤1:先筛选匹配的项目

先把当前分类下的所有项目筛选出来,存成一个变量,这样后续判断和渲染都更清晰:

const matchedProjects = this.props.projects.filter(project => category.id === project.category.id);

步骤2:根据筛选结果决定渲染内容

用三元运算符判断筛选后的数组长度:如果有匹配项,就循环渲染项目;如果没有,就显示一次“none”:

return (
  <div>
    {matchedProjects.length > 0 ? (
      matchedProjects.map(project => (
        <div key={project.id} className="project">
          <div className="project-box"><p>{project.name}</p></div>
        </div>
      ))
    ) : (
      <p>none</p>
    )}
  </div>
);

可选:更简洁的写法(逻辑或)

如果你喜欢更紧凑的代码,也可以用逻辑或运算符实现——因为空数组在JSX中会被视为“假值”,所以当map返回空数组时,会自动渲染后面的提示:

return (
  <div>
    {matchedProjects.map(project => (
      <div key={project.id} className="project">
        <div className="project-box"><p>{project.name}</p></div>
      </div>
    )) || <p>none</p>}
  </div>
);

这样一来,每个分类下只会在完全没有匹配项目的时候显示一次“none”,完美解决你之前的问题~

内容的提问来源于stack exchange,提问作者user14858420

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:27:39