React-Redux电商项目购物车SubTotal小计计算功能实现问题咨询
问题根因
你当前代码无法正常运行的核心原因是:cartProducts是从Redux中获取的购物车商品数组,而非单个商品对象,直接访问数组的quantity和price属性会返回undefined,二者相乘结果为NaN,自然无法正常展示。
实现方案
小计计算不需要修改Redux逻辑,直接在Cart组件内完成即可,分为两种常见场景:
1. 单个商品的行小计(每行展示对应商品的小计金额)
删掉render函数外层的subtotal变量定义,直接在遍历商品的map方法内计算对应商品的小计即可,代码修改如下:
// 删掉原来的 const subtotal = (cartProducts.quantity * cartProducts.price).toFixed(2); 这行代码 // 表格tbody的map循环内,Sub Total列修改为以下代码 <td>{(cartProduct.quantity * cartProduct.price).toFixed(2)}</td>
2. 整个购物车的总小计(所有商品合计金额)
如果需要在表格底部展示整单合计,可以在render函数内用reduce方法计算总和:
render () { const cartProducts = this.props.cart // 新增总小计计算逻辑 const totalSubtotal = cartProducts.reduce((sum, item) => { return sum + (item.quantity * item.price) }, 0).toFixed(2) // 其余原有代码不变,可以在table标签内新增tfoot展示总合计 // ... <tfoot> <tr> <td colSpan="5" className="text-right">总合计:</td> <td><strong>{totalSubtotal}</strong></td> <td></td> </tr> </tfoot> // ... }
冗余代码提示
你组件内定义的removeFromCart方法只做了过滤逻辑没有调用dispatch,实际上你已经通过mapDispatchToProps绑定了removeCart方法到props,这个空方法没有作用,可以直接删掉避免冗余。
内容的提问来源于stack exchange,提问作者Shpongle
相关产品推荐
相关产品推荐

