下一个打字稿中复选框的代码优化
Code optimization for checkboxes in next typescript
我只想将数据传递给一个复选框,这样代码就不会变得多余。
我已经采取了这些,所以我可以检查一些 API 数据的最大值和最小值。
const[checkValMax, setCheckValMax]= useState(599);
const[checkValMin, setCheckValMin]= useState(0);
const handleFirstInput= () => {
if(firstInp){
setCheckValMin(0); setCheckValMax(599)
}
else{
setCheckValMin(199); setCheckValMax(599)
}
}
return ( <div className='flex flex-col gap-2'>
// this resets the price tags
<div>
<label className='text-sm text-gray-400 mr-4'> Reset</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>handleReset()} />
</div>
// 1st checkbox
<div>
<label className='text-sm text-gray-400 mr-4'> {'>'} .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setFirstInp(!firstInp);handleFirstInput() }} />
</div>
// 2nd checkbox
<div>
<label className='text-sm text-gray-400 mr-4'>.00 - .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(200); setCheckValMax(299) }}/>
</div>
// 3rd checkbox
<div>
<label className='text-sm text-gray-400 mr-4'>.00 - .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(300); setCheckValMax(399) }}/>
</div>
// 4th checkbox
<div>
<label className='text-sm text-gray-400 mr-4'>.00 - .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(400); setCheckValMax(499) }}/>
</div>
// last checkbox
<div>
<label className='text-sm text-gray-400 mr-4'> {'<'} .00</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(0); setCheckValMax(500) }}/>
</div>
</div> )
有没有办法定义 1 个复选框组件并向其传递值?
你可以做到:
const YourComponent = () => {
const [checkValMax, setCheckValMax] = useState(599);
const [checkValMin, setCheckValMin] = useState(0);
const handleFirstInput = () => {
if (firstInp) {
setCheckValMin(0);
setCheckValMax(599);
} else {
setCheckValMin(199);
setCheckVlMax(599);
}
};
const checkboxes = [
{
label: 'Reset',
onClick: () => handleReset();
},
{
label: ' > .99',
onClick: () => {
setFirstInp(!firstInp);
handleFirstInput()
}
},
// etc...
]
return (
<div className='flex flex-col gap-2'>
{checkboxes.map(({ label, onClick }) =>
<div>
<label className='text-sm text-gray-400 mr-4'>{label}</label>
<input
className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3'
type='checkbox'
name='inputfield'
onClick={onClick}
/>
</div>
)}
</div>
);
};
export default YourComponent;
我只想将数据传递给一个复选框,这样代码就不会变得多余。
我已经采取了这些,所以我可以检查一些 API 数据的最大值和最小值。
const[checkValMax, setCheckValMax]= useState(599);
const[checkValMin, setCheckValMin]= useState(0);
const handleFirstInput= () => {
if(firstInp){
setCheckValMin(0); setCheckValMax(599)
}
else{
setCheckValMin(199); setCheckValMax(599)
}
}
return ( <div className='flex flex-col gap-2'>
// this resets the price tags
<div>
<label className='text-sm text-gray-400 mr-4'> Reset</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>handleReset()} />
</div>
// 1st checkbox
<div>
<label className='text-sm text-gray-400 mr-4'> {'>'} .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setFirstInp(!firstInp);handleFirstInput() }} />
</div>
// 2nd checkbox
<div>
<label className='text-sm text-gray-400 mr-4'>.00 - .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(200); setCheckValMax(299) }}/>
</div>
// 3rd checkbox
<div>
<label className='text-sm text-gray-400 mr-4'>.00 - .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(300); setCheckValMax(399) }}/>
</div>
// 4th checkbox
<div>
<label className='text-sm text-gray-400 mr-4'>.00 - .99</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(400); setCheckValMax(499) }}/>
</div>
// last checkbox
<div>
<label className='text-sm text-gray-400 mr-4'> {'<'} .00</label>
<input className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3' type='checkbox' name='inputfield' onClick={()=>{setCheckValMin(0); setCheckValMax(500) }}/>
</div>
</div> )
有没有办法定义 1 个复选框组件并向其传递值?
你可以做到:
const YourComponent = () => {
const [checkValMax, setCheckValMax] = useState(599);
const [checkValMin, setCheckValMin] = useState(0);
const handleFirstInput = () => {
if (firstInp) {
setCheckValMin(0);
setCheckValMax(599);
} else {
setCheckValMin(199);
setCheckVlMax(599);
}
};
const checkboxes = [
{
label: 'Reset',
onClick: () => handleReset();
},
{
label: ' > .99',
onClick: () => {
setFirstInp(!firstInp);
handleFirstInput()
}
},
// etc...
]
return (
<div className='flex flex-col gap-2'>
{checkboxes.map(({ label, onClick }) =>
<div>
<label className='text-sm text-gray-400 mr-4'>{label}</label>
<input
className='bg-gray-800 text-gray-400 rounded border border-stone-200 space-x-3'
type='checkbox'
name='inputfield'
onClick={onClick}
/>
</div>
)}
</div>
);
};
export default YourComponent;