我有两个按钮,一个按钮用于增加数量,一个按钮用于减少数量。
<button type="button" className="btn btn-danger btn-sm btn-details-addminus" disabled={this.state.quantity === '1'} onClick={() => this.addMinus("minus")}><i className="ion-android-remove"></i></button>
<strong>{this.state.quantity}</strong>
<button type="button" className="btn btn-success btn-sm btn-details-addminus" onClick={() => this.addMinus("add")}><i className="ion-android-add"></i></button>
这是addMinus:
addMinus = (name) => {
this.setState({
quantity: name === "add" ? parseFloat(this.state.quantity) + 1 : parseFloat(this.state.quantity) - 1
})
}
它首先起作用。当数量等于1时,减号按钮将被禁用,但是当您单击添加按钮并尝试将其减小时,当数量等于1并继续减小到负值时,该按钮不会返回到禁用状态。
答案 0 :(得分:7)
您的问题是您的disabled
检查期望使用字符串,但是您的setState
将其更新为数字(并且1 === '1'
为假)。最好始终将它视为一个或另一个,最好在这里使用数字:
<button type="button" disabled={this.state.quantity === 1} ...>
<i className="ion-android-remove"></i>
</button>
然后是您的更新处理程序
addMinus = (name) => {
this.setState(prevState => ({
quantity: name === "add" ? prevState.quantity + 1 : prevState.quantity - 1
})
}
答案 1 :(得分:2)
我将在setState之外执行逻辑。这可能与setState导致组件每次重新安装/更新的事实有关。像这样:
addMinus = (name) => {
const stateQuanity = name === "add" ? parseFloat(this.state.quantity) + 1 : parseFloat(this.state.quantity) - 1
this.setState({
quantity: stateQuanity
})
}
答案 2 :(得分:2)
您应该检查您的状态是否已经1
,并且动作是否为minus
,然后什么也不做(return null
),否则请执行递增/递减状态
addMinus = (name) => {
if (this.state.quantity === '1' && name==="minus") {
return null;
}
this.setState({
quantity: name === "add"
? parseFloat(this.state.quantity) + 1
: parseFloat(this.state.quantity) - 1
})
}
答案 3 :(得分:2)
也许这里的问题已禁用= {this.state.quantity ===“ 1”}。尝试不加引号
其他相同方法
您可以将初始状态数量值设置为零,因此无需每次单击按钮时都解析该值。
addMinus = (name) => {
let quantity = this.state.quantity;
if(name == “add”){
this.setState({
quantity: quantity+1
});
}else{
this.setState({
quantity: quantity-1
});
}
}