【发布时间】:2021-09-19 15:41:03
【问题描述】:
在我的组件中,我的输入范围有 5 个值,每个值都有价格分配。我也有输入复选框,我想使用它应用额外折扣。因此,当它设置为 true 时,我想使用折扣。我应该编写另一个函数还是可以使用我已经编写的函数之一?
const Cost = () => {
const arr = data.map(arr => arr)//here I have array with data like {"range": 3,"views": 100,"price":16
},
const [value, setValue] = useState(arr[2])//default value for range
const [checked, setChecked] = useState(false)//default value for checkbox
function handleChangeValue(e) {
setValue(arr[e.target.value - 1])
}//changing price when range is changed
function toggleChange() {
setChecked(prev => !prev)
}//changing checkbox
return (
<>
<Views>{value.views} pageviews</Views>
<Input
value={value.range}
onChange={handleChangeValue}
type="range"
name="range"
min="1"
max="5"
list="views">
</Input>
<Price><span>${value.price}</span>/month</Price>//this is price which I want to change
<Switch onClick={toggleChange} >
<label className="switch" htmlFor="toggle">
<input name="toggle" type="checkbox" aria-label="toggle" checked={checked} />//when this is set to true I want to apply extra 25% discount to my price
<span className="slider"></span>
</label>
</Switch>
</>
)
}
起初我想为这些输入创建两个不同的组件,但当时我不确定如何更改价格。
总而言之 - 当范围改变并且复选框为真时,价格也会改变。大家能给点建议吗?
更新
const [newPrice, setNewPrice] = useState(arr[2].price);
useEffect(() => {
let newPrice = value.price
if (checked) {
newPrice -= 0.25 * newPrice;
} else {
return newPrice
}
setNewPrice(newPrice)
}, [value, checked])
当我将复选框设置为 true 时,它确实应用了折扣,但是当我将其切换回 false 时,价格仍然有折扣。
【问题讨论】:
标签: reactjs input react-hooks