选择项目时反应更新购物车

时间:2019-04-05 12:41:54

标签: javascript reactjs

我是新来的反应者,并且正在从事飞行项目。 选择项目后,我正在尝试更新购物车。我知道代码的结构可能不是最好的方法,但这是我到目前为止的方法。

Export class DestinationPrices extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            flightData: [],
            checked:false,
            data:'',
            cart:[]
        };

        this.handleClick = this.handleClick.bind(this);
        this.handleAddToCart = this.handleAddToCart.bind(this);

    }

 NavCart() {

        return (

            <div className="Nav" >
                <Card body >

          <CardTitle ><h3><b>Flights Selected : </b></h3></CardTitle>
    <CardText >
<span className="fa fa-cart-plus fa-2x"> {this.props.cart.length}</span> 
    </CardText>


                </Card>
            </div>
            )
    }

这是购物车本身,应在选择后更新商品数量。 下面是选择方法,您可以选择不同的卡。

Select(FD) {

 this.state={route:''};

       return (
           <div>
               {FD.FlightID}
            <label>

                <Checkbox id={FD.FlightID}
                          name={FD.FlightID}
                          checked={this.setState.route}

                 onChange={(()=> this.handleCheckboxChange(FD.FlightID))}
               handleClick={()=>{this.handleClick(FD.FlightID)}}

                />
                <span>Select</span>
            </label>
           </div>


        )
    }

这些是我必须处理的功能

 handleCheckboxChange =(id) =>{
        var data;
        const selected = (e => e.FlightID = id);
        this.handleAddToCart(id);
    };

    handleAddToCart(flight) {
        const cartItem = this.state.cart.find(x => x.id === flight.id);
        this.setState({cart: [...this.state.cart, flight]})
    }

    handleClick(flight) {
        this.handleAddToCart(flight)
    }

如果有人能够提供帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

handleAddToCart(flight) {
        const cartItem = this.state.cart.find(x => x.id === flight.id);
        this.setState({cart: [...this.state.cart, flight]})
    }

this.state = {
        flightData: [],
        checked:false,
        data:'',
        cart:[]
    };

最初,您将购物车:[]设为空集。但是在handleAddToCart方法中,您试图在此空集中查找某些内容。如果未返回值,则函数返回未定义。

那你应该做什么:

在状态下创建一个flights对象。 (我不确定[[]用于什么flightData)

state={flights:allFlights} //Pass all your flights data from the source properly.

由于要在单击按钮时将广告投放添加到购物车,因此您应将该广告投放的“ id”作为参数传递给onClick函数。

将此示例应用于您的应用

<button className="cart-btn badge-primary"
                    onClick={() => {this.props.addToCart(id);}}>addToCart</button>

现在,单击按钮时,您会将ID传递给addToCart方法。接下来,您必须在“ flights:allFlights”对象中找到具有给定ID的航班。

const cartItem = this.state.flights.find(x => x.id === flight.id);
this.setState({cart: [...this.state.cart, cartItem]})

现在,您正在更新状态中的购物车对象。

由于您是新手,所以我不得不提及2种永远不会忘记的事情: 1-当您在数组中查找项目时,如果要修改该项目,则不能使用find方法。相反,您应该将“飞行”分配给另一个对象,在新数组中找到该项目的索引,然后对其进行修改。对于许多人来说,这是一个令人头疼的大反应。 2-this.setState({cart: [...this.state.cart, flight]})这不是正确的方法。 this.setState(()=> {返回{购物车:[... this.state.cart,cartItem]})