[英]React render multiple data based on conditional array
Array大批
let shippingList = [
{ 'courierName': 'a', 'minWeight': 0.1, 'maxWeight': 5, 'shippingRate': 5.5 },
{ 'courierName': 'b', 'minWeight': 0.1, 'maxWeight': 5, 'shippingRate': 5.0 },
{ 'courierName': 'c', 'minWeight': 0.1, 'maxWeight': 5, 'shippingRate': 4.9 },
{ 'courierName': 'd', 'minWeight': 0.1, 'maxWeight': 5, 'shippingRate': 6.0 },
{ 'courierName': 'a', 'minWeight': 5.0, 'maxWeight': 10.0, 'shippingRate': 7.5 },
{ 'courierName': 'b', 'minWeight': 5.0, 'maxWeight': 10.0, 'shippingRate': 8.5 },
{ 'courierName': 'c', 'minWeight': 5.0, 'maxWeight': 10.0, 'shippingRate': 9.5 },
{ 'courierName': 'd', 'minWeight': 5.0, 'maxWeight': 10.0, 'shippingRate': 10.5 },
]
If input number of weight based on max weight then output shipping rate.如果根据最大重量输入重量数量,则 output 运费。 Example:
例子:
...constructor(props) {
super(props);
this.state = { weight: '' };
}
myChangeHandler = (event) => {
this.setState({weight: event.target.value});
}
<form>
<h1>courierA {this._renderShippingFees}</h1>
<h1>courierB {this._renderShippingFees}</h1>
<h1>courierC {this._renderShippingFees}</h1>
<h1>courierD {this._renderShippingFees}</h1>
<p>Weight:</p>
<input
type='text'
onChange={this.myChangeHandler}
/>
</form>
How to output multiple shipping rates in real time based on input weight without create so many states like this如何根据输入重量实时 output 多个运费而不创建如此多的状态
this.setState({ courierA,B,C... })
Initial method:初始方法:
_renderShippingFees() {
let weight = this.state.weight
if (weight <= 5) {
return (
<span>$ 5.04</span>
)
} else if (weight <= 20) {
return (
<span>$ 10.50</span>
)
} else if (weight > 30) {
return (
<span>$ 20.50</span>
)
}
No need to declare multiple state variables , the current code is good enough.无需声明多个state 变量,目前的代码已经足够好了。
Try filtering the data from shippingList
similar to below尝试从
shippingList
中过滤数据,如下所示
...
_renderShippingFees(courierName) {
let shippingRate = 0;
const { weight } = this.state;
const inputWeight = isNaN(weight) ? 0 : weight;
// Filter data from shippingList
const itemList = shippingList.filter(item => item.courierName === courierName);
switch (true) {
case (inputWeight <= 5):
shippingRate = itemList.find(item => item.maxWeight <= 5).shippingRate;
break;
case (inputWeight <= 20):
shippingRate = itemList.find(item => item.maxWeight <= 20).shippingRate;
break;
...
}
return <span>$ {shippingRate}</span>;
}
...
// Call the _renderShippingFees as below in render method
<form>
<h1>courierA {this._renderShippingFees('a')}</h1>
<h1>courierB {this._renderShippingFees('b')}</h1>
<h1>courierC {this._renderShippingFees('c')}</h1>
<h1>courierD {this._renderShippingFees('d')}</h1>
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.