Я новичок, чтобы отреагировать, и я пытаюсь написать корзину для покупок, мне нужно использовать данные товаров, выбранных пользователем из магазина, чтобы отправить их на сервер. Это мой код:
import React,{Component} from 'react'
import Grid from '@material-ui/core/Grid';
import Paper from '@material-ui/core/Paper';
import Button from '@material-ui/core/Button';
class Food extends Component{
constructor(props){
super(props);
this.state = {
items:[],
cart:[]
};
this.addToCart=this.addToCart.bind(this);
}
componentWillReceiveProps(){
if (this.props.product.length > 0){
var info = this.props.product;
this.setState({items: info});
}
}
addToCart(item){
var found = false;
var updatedCart = this.state.cart.map((cartItem)=>{
if(cartItem.Name === item.Name){
found = true;
cartItem.quantity++;
return cartItem;
} else{
return cartItem;
}
});
if (!found) {
updatedCart.push({Id: item.ProductID, Name: item.Name, Price: item.Price, quantity: 1})
}
this.setState({
cart: updatedCart
});
}
render(){
var products = this.state.items.map((item) => {
return <Product details={item} addToCart={this.addToCart} key={item.ProductID} />
})
return (
<div>
<nav>
<div><h3>{this.props.cat}</h3></div>
<Cart cart={this.state.cart}/>
</nav>
<div className="Products">
{products}
</div>
</div>
);
}
}
class Cart extends Component{
constructor(props){
super(props);
this.state = {
open : false,
total:0,
quantity: 0
};
this.openCart = this.openCart.bind(this);
this.postOrder = this.postOrder.bind(this);
}
openCart(){
this.setState({open : !this.state.open});
}
postOrder(){
alert('hello')
}
render(){
return(
<div>
<div className={"Cart " + (this.state.open ? "Cart-Open" : "")} onClick={this.openCart}>
<p className="Title">Cart</p>
<div>
{this.props.cart.length > 0 ? this.props.cart.map((item) => {
var itemSelected = [{'id': item.Id, 'quantity':item.quantity}]
console.log("result",itemSelected);
console.log("total",item.quantity*item.Price);
return <p key={item.Id}>{item.Name}{item.quantity > 1 ? <span> {item.quantity}</span> : ''}</p> }) : <p>Empty</p>}
</div>
total : {this.state.total}
</div>
<Button variant="contained" color="primary" onClick={this.postOrder}>
خرید
</Button>
</div>
)
}
}
class Product extends Component{
constructor(props){
super(props);
this.state = {
};
this.addToCart = this.addToCart.bind(this);
}
addToCart(){
this.props.addToCart (this.props.details);
}
render(){
let item = this.props.details;
return(
<div className="Product" onClick={this.addToCart}>
<Grid container spacing={24}>
<Grid item xs={6} key={item.ProductID}>
<Paper className="food-item">
<p>{item.Name}</p>
<p>{item.Excerpt}</p>
<p>{item.Price}</p>
</Paper>
</Grid>
</Grid>
</div>
)
}
}
export default Food;
как вы видите в компоненте корзины, я получаю данные, которые выбрал пользователь, и сохраняю их в переменную itemSelected, теперь я хочу установить setState, но я не знаю, как я могу экспортировать данные из области функции карты, также я могу setState это внутри метода рендеринга (потому что это вызывает бесконечный цикл).
как я могу установить мои данные?
спасибо заранее: -)