React实现购物车案例

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<script src="../../js文件/react.development.js"></script>

<script src="../../js文件/react-dom.development.js"></script>

<script src="../../js文件/babel.min.js"></script>

<style>

.totalPrice {

color: skyblue;

font-weight: bold;

font-size: 30px;

}

</style>

</head>

<body>

<div id="root">

</div>

</body>

<script type="text/babel">

//定义类式组件

class Shopping extends React.Component {

constructor() {

super()

this.state = {

data: [

{

id: 1,

text: '《Vuejs》',

date: '1999-10-1',

price: 20,

number: 1

},

{

id: 2,

text: '《Html》',

date: '2000-10-1',

price: 40,

number: 1

},

{

id: 3,

text: '《JavaScript》',

date: '2001-10-1',

price: 30,

number: 1

},

{

id: 4,

text: '《React》',

date: '2002-10-1',

price: 50,

number: 1

}

]

}

}

// 购物车加减删除

subtract(number, index) {

// console.log('-----');

this.setState({

'this.state.data[index]': this.state.data[index].number--,

})

}

add(number, index) {

this.setState({

number: ++this.state.data[index].number,

})

}

deleteBook(index) {

// console.log('删除了图书');

this.setState({

// 过滤器的方式

//data: this.state.data.filter((item, indey) =>

// index != indey

)

})

}

// 计算总价

totalPrice() {

let totalPrice = this.state.data.reduce((pre, item) => {

// console.log(pre);

return pre + item.price * item.number

}, 0)

return totalPrice

}

render() {

let { data, totalPrice } = this.state

let newData = data.map((item, index) => {

return (

<tr key={index}>

<td>{item.id}</td>

<td>{item.text}</td>

<td>{item.date}</td>

<td>{'¥' + item.price}</td>

<td>

<button disabled={item.number === 1 ? true : false} onClick={() => this.subtract(item.number, index)}>-</button>

<span>{item.number}</span>

<button onClick={() => this.add(item.number, index)}>+</button>

</td>

<td>

<button onClick={() => this.deleteBook(index)}>删除</button>

</td>

</tr>

)

})

return (

<div>

<table border="1px">

<thead>

<tr>

<th>编号</th>

<th>图书名称</th>

<th>出版日期</th>

<th>价格</th>

<th>购买数量</th>

<th>操作</th>

</tr>

</thead>

<tbody>

{newData}

</tbody>

</table>

<div className="totalPrice">

<span >商品总价:¥{this.totalPrice()} </span>

</div>

</div>

)

}

}

const root = ReactDOM.createRoot(document.querySelector('#root'))

root.render(<Shopping />)

</script>

</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值