案例

<!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="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
<style>
table{
border: 1px solid #eee;
border-collapse: collapse;
}
th,td{
border: 1px solid #eee;
padding: 10px 16px;
text-align: center;
}
th{
#aaa;
}
.count{
margin: 0 5px;
}
</style>
</head>
<body>
<div id="app"></div>
<script>
function fromatPrice(price){
if(typeof price !== 'number'){
price = Number(price) || 0;
}
return '¥' + price.toFixed(2);
}
</script>
<script type="text/babel">
// 封装App 组件
class App extends React.Component{
constructor(){
super();
this.state = {
books:[
{
id:1,
name:"<<算法导论>>",
date:'2006-9',
price:85,
count:2
},
{
id:2,
name:"<<html>>",
date:'2006-2',
price:59,
count:1
},
{
id:3,
name:"<<css>>",
date:'2008-10',
price:39,
count:1
},
{
id:4,
name:"<<js>>",
date:'2006-3',
price:128,
count:1
}
]
}
}
renderBooks(){
return (
<div>
<table>
<thead>
<th>编号</th>
<th>书籍名称</th>
<th>出版日期</th>
<th>价格</th>
<th>购买数量</th>
<th>操作</th>
</thead>
<tbody>
{
this.state.books.map((item,index)=>{
return (
<tr>
<td>{index + 1}</td>
<td>{item.name}</td>
<td>{item.date}</td>
<td>{fromatPrice(item.price)}</td>
<td>
<button disabled = {item.count <=1} onClick = {e => this.changeBookCount(index,-1)}>-</button>
<span className="count">{item.count}</span>
<button onClick = {e => this.changeBookCount(index,1)}>+</button>
</td>
<td><button onClick={e => this.removeBook(index)}>移除</button></td>
</tr>
)
})
}
</tbody>
</table>
<h2>总价格: {this.getTotalPrice()}</h2>
</div>
)
}
renderEmptyTip(){
return <h2>购物车为空~</h2>
}
render(){
return this.state.books.length ? this.renderBooks() : this.renderEmptyTip();
}
changeBookCount(index,count){
const newBooks = [...this.state.books];
newBooks[index].count += count;
this.setState({
books:newBooks
})
}
removeBook(index){
// console.log(index);
this.setState({
books: this.state.books.filter((item,indey)=> index !== indey )
})
}
// 获取总价格
getTotalPrice(){
// let totalPrice = 0;
// for(let item of this.state.books){
// totalPrice += item.price * item.count;
// }
let totalPrice = this.state.books.reduce((preValue,item)=>{
return preValue + item.price * item.count;
},0);
return fromatPrice(totalPrice);
}
}
ReactDOM.render(<App/>,document.getElementById('app'));
</script>
</body>
</html>
我是Eric,手机号是13522679763

浙公网安备 33010602011771号