我是一个相对较新的React开发人员,我试图只显示具有外部、内部、组合或附加服务类型的特定服务.到目前为止,我已经将这些服务映射到react组件中,并且能够显示从数据库中提取的每个服务.但是,我只想根据用户的 Select 显示"外部"服务或"内部"服务.

我目前的代码如下:

import React, { useEffect, useState } from 'react';
import Service from './Service';
import OffersService from '../../../services/OffersService';
import Button from '../../UI/Button';

const ServiceList = props => {
    const [offers, setOffers] = useState([]);
    const [service, setService] = useState('Exterior');

    const exteriorTypeHandler = () => {
        setService('Exterior');
    };

    const interiorTypeHandler = () => {
        setService('Interior');
    };

    const comboTypeHandler = () => {
        setService('Combo');
    };

    const addonsTypeHandler = () => {
        setService('Add Ons');
    };

    const offersList = offers.map(offer => (
        <Service
            key={offer.id}
            code={offer.serviceCode}
            name={offer.serviceName}
            description={offer.description}
            type={offer.serviceType}
            price={offer.salePrice}
        />
    ));

    useEffect(() => {
        getAllOffers();
    }, []);

    const getAllOffers = () => {
        OffersService.getAllServices()
            .then(response => {
                setOffers(response.data);
            })
            .catch(err => {
                console.log(err);
            });
    };

    return (
        <div>
            <div className='flex justify-center space-x-4'>
                <Button name='Exterior' onClick={exteriorTypeHandler} />
                <Button name='Interior' onClick={interiorTypeHandler} />
                <Button name='Combos' onClick={comboTypeHandler} />
                <Button name='Add Ons' onClick={addonsTypeHandler} />
            </div>

            <ul>{offersList}</ul>
        </div>
    );
};

export default ServiceList;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

为了得到我想看到的结果,我try 了以下代码:

<ul>
  {offersList.forEach(offer => {
        if (offer.serviceType === service) {
        return offer;
        }
  })}
</ul>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

我也try 过:

在我的UDE、我的讲座、YouTube或其他堆栈溢出帖子中,我找不到任何有帮助的东西,所以我感谢所有能提供的帮助!

推荐答案

<ul>
  {offers.map(offer => {
        if (offer.serviceType === service) {
            return <li> <Service
                         key={offer.id}
                         code={offer.serviceCode}
                         name={offer.serviceName}
                         description={offer.description}
                         type={offer.serviceType}
                         price={offer.salePrice}
    /> </li>;
        }
  })}
</ul>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

您需要使用map而不是forEach,并返回包装在<li></li>标记中的offer.

Reactjs相关问答推荐

每个都有重复元素的嵌套组件

LocalStore未存储正确的数据

无法在jest中发布行动

cypress 不能点击SPAN

Mantine DatePickerInput呈现错误

svg每条路径上的波浪动画

状态更改时的rtk查询触发器

悬停轴时重新绘制自定义参照线

获取类别和页面的参数

使用以Jest 的方式返回 Promise 的方法来模拟可构造的 API 类时出现问题

如何在不同的路由中渲染相同的页面组件(包括 getServerSideProps)

ReactJS 中的图像加载顺序

未捕获的类型错误:useSelector 不是函数

从一个获取 axios 请求(ReactJS)中删除默认参数

Cypress ,重试不再附加到 DOM 的元素

如何使用 UseState 正确测试组件

将 Material UI 菜单渲染为

为什么我在运行一些 npm react 命令时会收到这些警告?

调用函数以获取数据并在数据到达时导航到链接

在渲染不显示子元素之后,再次渲染时,子元素状态数据完全消失了.为什么会这样以及如何防止它发生?