zoukankan      html  css  js  c++  java
  • react购物车

    import React, { Component } from 'react';
     
    import {Tabs} from './Tabs'
     
    import 'whatwg-fetch'
     
    import '../assets/css/Tab3.css'
    import {Link} from 'react-router-dom'
     
     
    export class Tab3 extends Component {
        constructor(props){
            super(props)
            this.state = {
                arr:[],
                totalPrice:0
            }
        }
        //获取输入框的值
        handInputChange=(e,i)=>{
            console.log(e.target.value)
            //文本框的值 e.target.value 需要赋值给 json 数据的下标为index
            this.setState({
                arr:this.state.arr.map((ele,index)=>{
                    if(index==i){
                        ele.num=e.target.value
                        return ele
                    }else {
                        return ele
                    }
                })
            })
            this.SumPrice()
        }
        //add 加
        add=(e,i)=>{
            console.log(e.target.value)
            //文本框的值 e.target.value 需要赋值给 json 数据的下标为index
            this.setState({
                arr:this.state.arr.map((ele,index)=>{
                    if(index==i){
                        ele.num=ele.num*1+1
                        return ele
                    }else {
                        return ele
                    }
                })
            })
            this.SumPrice()
     
        }
        //减
        jian=(e,i)=> {
            // console.log(e.target.value)
            //文本框的值 e.target.value 需要赋值给 json 数据的下标为index
            this.setState({
                arr: this.state.arr.map((ele, index) => {
                    if (index == i) {
                        if(ele.num==0){
                            ele.num = 1
                            return ele
     
                        }else{
                            ele.num = ele.num*1-1
                            return ele
     
                        }
     
                    } else {
                        return ele
                    }
                })
            })
            this.SumPrice()
        }
        //删除
        del=(e,i)=>{
            this.setState({
                arr:this.state.arr.filter((ele,index)=>{
                    if(index !=i ){
                        return true
                    }
                })
            })
        }
        //获取单选框的值
        getCheckedChange=(e,i)=>{
            //console.log(e.target.checked)
            //文本框的值 e.target.value 需要赋值给 json 数据的下标为index
            this.setState({
                arr:this.state.arr.map((ele,index)=>{
                    if(index==i){
                        ele.checked=e.target.checked
                        return ele
                    }else {
                        return ele
                    }
                })
            })
            this.SumPrice()
        }
        //点击全选和全不选
        CheckedChange=(e)=>{
            if(e.target.checked==true){
                this.setState({
                    arr:this.state.arr.map((ele,index)=>{
                        ele.checked=true
                        return ele
                    })
                })
     
            }else if(e.target.checked==false){
                this.setState({
                    arr:this.state.arr.map((ele,index)=>{
                        ele.checked=false
                        return ele
                    })
                })
            }
            this.SumPrice()
        }
        //计算总价
        SumPrice=()=>{
            var sum=0
            this.state.arr.forEach((ele,index)=>{
                sum+=ele.num*ele.new_price
            })
            this.setState({
                totalPrice:sum
            })
        }
        render() {
            // console.log(this.state.arr)
            return (
              <p className="shopCar">
     
                <p className='header'>
     
                    <Link to="/tab1">返回</Link>
                    <h3>购物车</h3>
     
                </p>
     
                <p className='section'>
                    <p className='list'>
                        {
                            this.state.arr.map((ele,index)=>{
                                return (
                                    <p className='item' key={index}>
     
                                                <p className='radio'>
                                                    <input type="checkbox" checked={ele.checked} onChange={
                                                        (e)=>{
                                                            this.getCheckedChange(e,index)
                                                        }
                                                    }/>
                                                </p>
     
                                                <p className='le'>
                                                    <img src={ele.img} alt="" />
                                                </p>
     
                                                <p className='center'>
                                                    <h3>{ele.name}</h3>
                                                    <p className='num'>
                                                        <button onClick={(e)=>{
                                                            // console.log(e,index)
                                                            this.jian(e,index)
                                                        }}>-</button>
                                                        {/*获取文本框的值*/}
                                                        <input type="text" value={ele.num} onChange={(e)=>{
                                                            // console.log(e,index)
                                                            this.handInputChange(e,index)
                                                        }}/>
                                                        <button onClick={(e)=>{
                                                            // console.log(e,index)
                                                            this.add(e,index)
                                                        }}>+</button>
                                                    </p>
     
                                                    <p className="price">
                                                        <p>单价: {ele.new_price} 总价:{ele.new_price*ele.num}</p>
                                                    </p>
     
                                                </p>
                                                <p className='ri'>
                                                    <button onClick={(e)=>{
                                                        this.del(e,index)
                                                    }}>删除</button>
                                                </p>
                                            </p>
                                )
                            })
                        }
                    </p>
                </p>
     
                <p className="footer">
                                全选: <input type="checkbox" ref="quanxuan" onChange={
                    (e)=>{
                        this.CheckedChange(e)
                    }
                                 }/>
                                合计: {this.state.totalPrice}
                                <button onClick={
                                    (e)=>{
                                      this.props.history.push('/sub')
                                        //使用数组的过滤方法来选择更新之后的值
                                        var newArr=this.state.arr.filter((ele,index)=>{
                                            if(ele.checked==true){
                                                return true
                                            }else {
                                                return false
                                            }
                                        })
                                        //使用浏览器缓存来传递数据,因为h5
                                        window.localStorage.setItem("shuju",JSON.stringify(newArr))
                                    }
                                }>结算</button>
                        </p>
     
              </p>
            );
        }
        //渲染页面
        componentDidMount(){
            var url = './shopping.json'
     
                fetch(url)
                .then((res)=>{return res.json()})
                .then((res)=>{
                    this.setState({
                        arr:res
                    })
                })
          }
        //页面更新
        componentDidUpdate(){
            // console.log("更新了")
            var bool=this.state.arr.every((ele,index)=>{
                if(ele.checked==true){
                    return true
                }else {
                    return false
                }
            })
            // console.log(bool)
            if(bool==true){
                this.refs.quanxuan.checked=true
            }else {
                this.refs.quanxuan.checked=false
            }
        }
     
     
     
    }
  • 相关阅读:
    窗口总在最前的时候信息框弹出解决
    IP地址与子网掩码知识
    六类线、五类线、超五类线有什么区别?
    如何删除internet网关连接图标
    密码输入框用“●”做遮盖符
    万象2004数据库说明
    客户机绑定路由例子bat
    命令行下导入、导出注册表
    网管维护常用命令
    hadoop shell 操作命令
  • 原文地址:https://www.cnblogs.com/tis100204/p/10442490.html
Copyright © 2011-2022 走看看