通过复选框创建价格过滤器

Creating price filter through checkboxes

import { useState } from 'react';

const Shop = ({capes}: Props)=>{

const[checkVal1, setCheckVal1]= useState(0);
    const[checkVal2, setCheckVal2]= useState(0);
    const[checkVal3, setCheckVal3]= useState(0);
    const[checkVal4, setCheckVal4]= useState(0);
    const[checkVal5, setCheckVal5]= useState(0);

    const handleCheckData=(cape:any)=>{
        if(cape.price>=0 && cape.price>=checkVal1){
            return 1;
        }
        else if(cape.price>=200 &&  cape.price<=checkVal2){
            return 1;
        }
        else if(cape.price>=300 &&  cape.price<=checkVal3){
            return 1;
        }
        else if(cape.price>=400 &&  cape.price<=checkVal4){
            return 1;
        }
        else if(cape.price<= checkVal5){
            return 1;
        }
        // else{
        //     return 1;
        // }
    }


return(
<div>
<div>
<div className='flex flex-col space-y-4'>

{/* 1st checkbox */}
<div>
<input type='checkbox' onClick={()=>setCheckVal1(199)} />
<label > {'>'} .99</label>
</div>   

{/* 2nd checkbox */}
<div>
<input type='checkbox' onClick={()=>setCheckVal2(299)}/>
<label >.00 - .99</label>
</div> 

{/* 3rd checkbox */}
<div>
<input type='checkbox' onClick={()=>setCheckVal3(399)}/>
<label >.00 - .99</label>
</div> 

{/* 4th checkbox */}
<div>
<input type='checkbox' onClick={()=>setCheckVal4(499)}/>
<label >.00 - .99</label>
</div> 

{/* 5th checkbox */}
<div>
<input type='checkbox' onClick={()=>setCheckVal5(500)}/>
<label > {'<'} .00</label>
</div>                            
</div>

这是我要使用复选框过滤的数据。 Cape 是另一个组件,我们从中检索价格,例如 'cape.price or cape.name'.

有没有办法过滤它们,我们也可以重置它们,就像如果我们点击一​​个复选框,它会显示结果,再次点击它会删除价格过滤器?

{capes.map((cape) => (

             handleCheckData(cape) ? 

               <div
                 key={cape.id}
                  className='text-white transition duration-300 ease-in-out group hover:text-orange-500' >
                    <div className='flex flex-col items-center space-y-4 cursor-pointer'>
                    <div className='-ml-8 transition duration-300 ease-in-out group-hover:scale-110 transform-gpu'>
                    <RenderedMineman
                     capes={[cape]}
                     rotation={
                     cape.type ===
                     CapeTypeEnum.Cape
                     ? 'back'
                     : 'front'
                     }
                     />
                     </div>
                    <div className='space-y-1 text-center'>
                    <Text
                    as='h3'
                    tag='h3'
                    className='text-current'
                    >
                    {cape.name}
                    </Text>
                    </div>
                    <div className='space-y-1 text-center text-gray-700'>
                    <Text as='h4' tag='p'>
                    ${toDollars(cape.price)}
                    </Text>
                    </div>
                    </div>
                    </Link>
                    </div>: ''
                    ))}{' '}
</div>
)
}

您可以在映射之前对数组使用过滤函数: capes.filter((cape) => handleCheckData(cape)).map((cape) => (....