#arrays #reactjs #array-map #ecma
#массивы #reactjs #array-map #ecma
Вопрос:
export default class Cart extends Component {
constructor(props) {
super(props);
this.state = {
selectedForCart: [],
checkOut: true,
priceQuantity: undefined,
total: undefined,
};
}
render() {
return (
<div>
<NavBar />
{this.state.selectedForCart amp;amp;
this.state.selectedForCart.map((v, i) => {
return (
<Container className="mt-5" key={i}>
<Row>
<Col lg={2} md={2} sm={12}>
<p>
Price:amp;emsp;amp;#8377;
{v.priceTaxIncluded}
</p>
<p style={{ fontSize: "10px" }}>Tax inclusive</p>
</Col>
<Col lg={2} md={2} sm={12}>
<Form.Group>
<Form.Label>Quantity</Form.Label>
<Form.Control
type="number"
placeholder="Quantity"
value={1}
onChange={(e) => {
this.setState({
priceQuantity: e.target.value
});
console.log(v.priceTaxIncluded * e.target.value);
}}
/>
</Form.Group>
</Col>
<Col lg={2} md={2} sm={12}>
{this.state.checkOut amp;amp; (
<>
<p>{this.state.priceQuantity}</p>
</>
)}
</Col>
</Row>
</Container>
);
})}
<Footer />
</div>
);
}
}
Здесь, в приведенном выше коде, я отображаю массив элементов из значения объекта состояния «». И если я увеличиваю определенный элемент, то количество этого конкретного элемента должно увеличиваться. Но этого не происходит, все элементы увеличиваются. А также цена должна быть умножена на увеличенное значение и должна быть показана…
Спасибо.
Комментарии:
1. Состояние, которое вы устанавливаете в onChange, где вы к нему обращаетесь? Также при отображении предоставьте ключ к родительскому элементу ie. В противном случае React не поймет, какую строку вы меняете.
2. @Rohitha Сэр / мадам, я обновил код, не могли бы вы его проверить? Я получаю доступ к состоянию в теге p
Ответ №1:
Вы можете привязать priceQuantity к входному значению. Затем условно отобразите в последнем столбце. Когда вы пытаетесь напечатать priceQuantity в последнем столбце, он будет отображаться для всех строк.
this.state = {
...
priceQuantity: 0,
..
};
{this.state.selectedForCart amp;amp;
this.state.selectedForCart.map((v, i) => {
return (
<Container className="mt-5" key={i}>
<Row>
<Col lg={2} md={2} sm={12}>
<p>
Price:amp;emsp;amp;#8377;
{v.priceTaxIncluded}
</p>
<p style={{ fontSize: "10px" }}>Tax inclusive</p>
</Col>
<Col lg={2} md={2} sm={12}>
<Form.Group>
<Form.Label>Quantity</Form.Label>
<Form.Control
type="number"
placeholder="Quantity"
value={this.state.priceQuantity}
onChange={(e) => {
this.setState({
priceQuantity: e.target.value
});
console.log(v.priceTaxIncluded * e.target.value);
}}
/>
</Form.Group>
</Col>
<Col lg={2} md={2} sm={12}>
{this.state.checkOut amp;amp; (
<>
<p>{this.state.priceQuantity ? v.priceTaxIncluded * this.state.priceQuantity : 0}</p>
</>
)}
</Col>
</Row>
</Container>
);
})}
Комментарии:
1. сэр, пожалуйста, проверьте изображение, которое я загрузил. Он по-прежнему отображается так же
2. Можете ли вы добавить свой код в codesandbox, его было бы проще проверить.