2021-05-22

import React, { Component } from 'react'
import './css/goods.css'


export default class App extends Component {
  state = {
    ischeckAll: false,
    Totalprice: 0,
    Totalnumber: 0,
    datalist: [{
      name: "商品1",
      price: 10,
      number: 1,
      id: 1,
      limit: 5, //限购
      pic: "https://static.maizuo.com/pc/v5/usr/movie/44dc08914d508fc47c8267c6ca73f2d8.jpg",
      checked: false
    },
    {
      name: "商品2",
      price: 20,
      number: 2,
      id: 2,
      limit: 10, //限购
      pic: "https://static.maizuo.com/pc/v5/usr/movie/44dc08914d508fc47c8267c6ca73f2d8.jpg",
      checked: false
    },
    {
      name: "商品3",
      price: 30,
      number: 3,
      id: 3,
      limit: 15, //限购
      pic: "https://static.maizuo.com/pc/v5/usr/movie/44dc08914d508fc47c8267c6ca73f2d8.jpg",
      checked: false
    }
    ]
  }
  render () {
    return (
      <div>
        <input type="checkbox" checked={this.state.ischeckAll} onChange={
          () => this.allCheck()} />全选/全不选
        <ul>
          {this.state.datalist.map((item, index) =>
            <li key={index} >
              <input type="checkbox" checked={item.checked} onChange={() => this.singleCheck(index)} />
              <img src={item.pic} alt="" />

              <div>
                <div>{item.name}</div>
                <div style={{ color: "red" }}>¥{item.price}</div>
              </div>

              <div>
                <button onClick={this.changeNumberCount.bind(this, index, -1)} disabled={item.number === 1}>-</button>
                <span>{item.number}</span>
                <button onClick={this.changeNumberCount.bind(this, index, 1)}>+</button>
              </div>

              <div>
                <button onClick={this.removeItem.bind(this, index)}>删除</button>
              </div>
            </li>
          )}
        </ul>
        <div>总金额:{this.state.Totalprice} 总数量:{this.state.Totalnumber}</div>
      </div>
    )
  }
  changeNumberCount (index, count) { // 加减
    const newdatalist = [...this.state.datalist]
    newdatalist[index].number += count
    this.setState({
      datalist: newdatalist
    })
  }
  removeItem (index) { // 删除
    this.setState({
      datalist: this.state.datalist.filter((item, indey) => index !== indey)
    })
    this.getTotal()
  }
  getTotal () { // 总计
    let oldlist = [...this.state.datalist]
    let total = 0
    let num = 0
    let newlist = oldlist.filter((item) => item.checked === true) //  选中的
    newlist.map((item) => {
      total += item.number * item.price
      num += item.number
    })
    this.setState({
      Totalprice: total,
      Totalnumber: num
    })
  }
  singleCheck (index) { // 单选
    let newlist = [...this.state.datalist]
    newlist[index].checked = !newlist[index].checked
    let ischeckAll = this.state.ischeckAll
    ischeckAll = newlist.every((item) => item.checked)
    this.setState({
      datalist: newlist,
      ischeckAll: ischeckAll
    })
    this.getTotal()
  }
  allCheck () { // 全选
    let newlist = [...this.state.datalist]
    let ischeckAll = !this.state.ischeckAll
    newlist.map((item) => item.checked = ischeckAll)
    this.setState({
      datalist: newlist,
      ischeckAll: ischeckAll
    })
    this.getTotal()
  }

}

上一篇:关于List集合的去重


下一篇:the rust book 的简单入门笔记