我可能会措辞这有点奇怪。让我列出一些代码来帮助解释。我正在编写一个简单的反应组件。这个反应组件有一个表格,我提交表格。这就是我到目前为止所做的:
onSubmit(event){
event.preventDefault()
if (this.checkQuantity()){
// this is what i want to be simpler, the return value i want is already in the checkQuantity function in the if condition
return true
} else {
let itemId = this.props.item.id
let quantity = this.state.quantity
this.props.onTransaction(itemId, quantity)
}
}
checkQuantity(){
if (this.state.quantity > this.props.item.quantity){
alert("Can't buy what's not there!")
return true
} else {
return false
}
}
与上面的评论一样,我只想停止执行表单提交。我想,我只是在这种情况下寻找最佳实践。我希望抽象功能,但在条件中使用抽象功能的返回值作为返回。
答案 0 :(得分:3)
我会写
onSubmit(event) {
event.preventDefault()
if (!this.checkQuantity()) {
let itemId = this.props.item.id
let quantity = this.state.quantity
this.props.onTransaction(itemId, quantity)
}
}
checkQuantity() {
const isToomuch = this.state.quantity > this.props.item.quantity;
if (isToomuch) {
alert("Can't buy what's not there!")
}
return isToomuch
}
或者您可能希望将alert
置于onSubmit
方法中,然后checkQuantity
变得更加简单。您还可以将checkQuantity
重命名为更具描述性的内容,例如isInvalidQuantity
。
答案 1 :(得分:0)
onSubmit(event){
event.preventDefault()
return checkQuantity();
}
checkQuantity(){
if (this.state.quantity > this.props.item.quantity){
alert("Can't buy what's not there!")
return true
} else {
let itemId = this.props.item.id
let quantity = this.state.quantity
this.props.onTransaction(itemId, quantity)
return false
}
}
答案 2 :(得分:0)
这里的问题是你不只是想返回checkQauntity()的值,你想对返回值进行操作然后决定做什么。在这种情况下,您拥有的代码与任何方式一样好。
但是对于更一般的情况(你不只是返回真或假,你可以做以下事情:
onSubmit(event){
event.preventDefault();
var check = checkQuantity();
if (check > 6 ){
return check;
}
else {
//do something else..
}
}
checkQuantity(){
var someNumber = ...someNumber;
return someNumber;
}
答案 3 :(得分:0)
我觉得你在不必要地拆分功能。以下代码不足够吗?
onSubmit(event){
event.preventDefault()
if (this.state.quantity > this.props.item.quantity){
alert("Can't buy what's not there!")
} else {
let itemId = this.props.item.id
let quantity = this.state.quantity
this.props.onTransaction(itemId, quantity)
}
}
此外,与其他人一样,返回值在您的示例中没有意义,因为您没有检查它。