reactjs - 映射函数在一个组件上渲染所有图像,而不是每个组件一个图像
问题描述
我正在对我的数据库进行外部 API 调用,该数据库包含存储在 firebase 中的图像的 URL。当我映射数组时,它会在每个元素上渲染所有六个图像,而不是像我想要的那样每个元素一个。我的代码如下:
import React from 'react';
import { gql } from 'apollo-boost';
import { useQuery } from '@apollo/react-hooks';
import Collapsible from 'react-collapsible';
import Isp from '../components/Isp';
import SearchGroup from '../components/SearchGroup';
import Seek from '../components/Seek';
import plus from '../images/icon_plus.png';
import minus from '../images/icon_minus.png';
const GET_ALL_LINKS = gql`
{
allLinks {
category
imageLink
}
}
`;
const Section = () => {
const { data } = useQuery(GET_ALL_LINKS);
const categories = data && data.allLinks.map(link => link.category);
const allCategories =
categories &&
categories.filter((item, index) => categories.indexOf(item) === index);
const images = data && data.allLinks.map(image => image.imageLink);
const allImages =
images && images.filter((item, index) => images.indexOf(item) === index);
console.log(allImages);
return (
<div>
{allCategories &&
allCategories.map(category => (
<ul key={category} className='searchmenu'>
<Collapsible
trigger={
<span className={`outer-span`}>
{allImages &&
allImages.map(image => (
<img src={image} alt='' key={image} />
))}
{category}
<span
className='inner-span'
style={{
backgroundImage: `url(${plus})`,
backgroundRepeat: 'no-repeat',
border: 'none',
float: 'right'
}}
></span>
</span>
}
triggerWhenOpen={
<span className={`outer-span`}>
{allImages &&
allImages.map(image => (
<img src={image} alt='' key={image} />
))}
{category}
<span
className='inner-span'
style={{
backgroundImage: `url(${minus})`,
backgroundRepeat: 'no-repeat',
border: 'none',
float: 'right'
}}
></span>
</span>
}
>
<Isp category={category} />
<SearchGroup category={category} />
<Seek category={category} />
</Collapsible>
</ul>
))}
</div>
);
};
export default Section;
这是它在屏幕上的呈现方式。
理想情况下,我希望每个类别获得一张独特的图像。
解决方案
首先你制作一张地图 allCategories
allCategories.map(category => (
然后你为 allImages 做一个循环
allImages.map(image => (
因此所有图像都显示在所有类别中。
但是如果你做了一些条件而不是使用第二个循环,比如获取以下类别的图像并在没有任何循环的情况下显示它。我认为这将解决您的问题
如果您可以提供 allCategories 数组和 allImages 数组的数据集,我可以进一步帮助您。
推荐阅读
- javascript - 第二卷滑块,HTML 集合与节点列表
- google-apps-script - 谷歌应用脚本电子表格和 Bigquery 查询
- wordpress - 如何使 wordpress 管理屏幕字段成为必需
- javascript - 使用 Flatpickr 在结果中将当前日期设置为“今天”
- javascript - 自动完成如何在建议中写粗体字母
- twitter - Apache Flink:未触发流加入窗口
- c++ - 访问向量迭代器元素以输出
- kotlin - Ktor Netty 服务器发送空响应
- ios - 在 VoiceOver 开启时,在带有按钮的堆栈视图中设置不同的行为
- firebase - Firebase 数据库规则权限被拒绝但模拟工作