class Cart extends React.Component {
constructor() {
super()
// 给方法绑定this
this.reduce = this.reduce.bind(this);
this.add = this.add.bind(this);
}
state = {
carts: [{
id: 1,
name: '足球鞋',
price: 25,
count: 1,
total: 25
}, {
id: 2,
name: '篮球鞋',
price: 35,
count: 1,
total: 35
}, {
id: 3,
name: '草鞋',
price: 125,
count: 1,
total: 125
}]
}
// 点击-按钮的事件
reduce(e) {
// 拿到当前标签上绑定的对应的id,通过id找到对应的对象,然后通过setState来更新数据
this.state.carts.map(item => {
// 如果id相同,我们就需要把数量进行-1
if (item.id == e.target.dataset.id) {
if (item.count > 0)
item.count--
// 计算一下总价,在遍历this.state.carts的时候,数据其实已经进行了更改,我们只需要通知React调用一下render来进行重新渲染即可
item.total = item.count * item.price
}
})
// 调用setState方法来让render方法进行重新执行
this.setState({});
}
// 点击+按钮的事件
add(e) {
// 拿到当前标签上绑定的对应的id,通过id找到对应的对象,然后通过setState来更新数据
this.state.carts.map(item => {
// 如果id相同,我们就需要把数量进行+1
if (item.id == e.target.dataset.id) {
item.count++
// 计算一下总价,在遍历this.state.carts的时候,数据其实已经进行了更改,我们只需要通知React调用一下render来进行重新渲染即可
item.total = item.count * item.price
}
})
// 调用setState方法来让render方法进行重新执行
this.setState({});
}
render() {
return (
<ul>
{this.state.carts.map(item => {
return (
<li key={item.id}>
{/* 显示的名称 */}
<span>{item.name}</span>
{/* 显示的价格 */}
<span>¥{item.price}</span>
{/* -按钮 */}
<button onClick={this.reduce} data-id={item.id}>-</button>
{/* 显示数量 */}
<input type="text" value={item.count} disabled />
{/* +按钮 */}
<button onClick={this.add} data-id={item.id}>+</button>
{/* 总价 */}
<span>总价: ¥{item.total}</span>
</li>
)
})}
</ul>
)
}
}
ReactDOM.render(<Cart />, document.getElementById('root'))