重温react-02

news2024/11/19 19:33:28

shopdemo

import React, { Component } from 'react'
export default class shopDemo extends Component {
    state = {
        goods: [
            {
                id: 1,
                name: '商品1',
                price: 100,
                number: 0,
                money: 0
            },
            {
                id: 2,
                name: '商品2',
                price: 200,
                number: 0,
                money: 0
            },
            {
                id: 3,
                name: '商品3',
                price: 300,
                number: 0,
                money: 0
            }
        ],
        allprice: 0
    }
    // 校验所有的input是否选中
    changeAllSelect() {
        let inputAllMessage = document.getElementsByTagName('input')
        for (let i = 1; i < inputAllMessage.length; i++) {
            console.log(inputAllMessage);
            if (!inputAllMessage[i].checked) {
                return false;
            }
        }
        return true;
    }
    // 获取到所有的函数, 然后进行判断, 判断是否全选
    changeFunction() {
        let result = this.changeAllSelect()
        let allResultSelect = document.getElementById('all')
        if (result) {
            allResultSelect.checked = true
        } else {
            allResultSelect.checked = false
        }
    }
    // 减少商品的数量计算单价和总价
    reduceGoods(index) {
        if (this.state.goods[index].number <= 0) {
            return alert('不能再少了')
        } else {
            this.setState({
                goods: this.state.goods.map((item, ind) => {
                    if (index === ind) {
                        item.number--
                        item.money = item.number * item.price
                    }
                    return item
                }),
                allprice: this.state.allprice - this.state.goods[index].price
            })
        }
        if (this.state.goods[index].number == 0) {
            let idInput = document.getElementById(index)
            idInput.checked = false
        }
        this.changeFunction()
    }
    // 增加商品计算总价和改变商品的数量
    addGoods(index) {
        this.setState({
            goods: this.state.goods.map((item, ind) => {
                if (index === ind) {
                    item.number++
                    item.money = item.number * item.price
                }
                return item
            }),
            allprice: this.state.allprice + this.state.goods[index].price
        })
        if (this.state.goods[index].number > 0) {
            let idInput = document.getElementById(index)
            idInput.checked = true
        }
        this.changeFunction()
    }
    // 全选操作
    changeValue() {
        const getSelectValue = document.getElementById('all')
        let inputAllMessage = document.getElementsByTagName('input')
        if (getSelectValue.checked) {
            for (let i = 1; i < inputAllMessage.length; i++) {
                console.log(inputAllMessage);
                inputAllMessage[i].checked = true;
            }
            let allprice = 0
            for (let i = 1; i < inputAllMessage.length; i++) {
                if (inputAllMessage[i].checked) {
                    allprice += this.state.goods[i-1].money
                }
            }
            this.setState({
               allprice:  allprice
            })
        } else {
            for (let i = 1; i < inputAllMessage.length; i++) {
                console.log(inputAllMessage);
                inputAllMessage[i].checked = false;
            }
            this.setState({
                allprice:0
            })
        }
    }
    // 判断是否每一项都是全部被选中的状态
    checkedMessage(value){
        for(let i=1;i<value.length;i++){
            if(!value[i].checked){
                return false
            }
        }
        return true
    }
    // 点击选择单个商品时触发的函数
    everyChangeInputValue(){
        const inputChangeValues = document.getElementsByTagName('input')
        let checkResult = this.checkedMessage(inputChangeValues)
        if(checkResult){
            document.getElementById('all').checked = true
        }else{
            document.getElementById('all').checked = false
        }
    }
    // 页面配置
    render() {
        return (
            <div>
                <div>
                    全选<input type="checkbox" id='all' onClick={() => this.changeValue()} />
                </div>
                <div >
                    {
                        this.state.goods.map((item, index) => {
                            return <div key={index}>
                                <input type="checkbox" id={index} onClick={() => this.everyChangeInputValue()} />
                                <span>{item.name}</span>
                                <span>{item.price}</span>
                                <button onClick={() => this.reduceGoods(index)}>-</button>
                                <span>{item.number}</span>
                                <button onClick={() => this.addGoods(index)}>+</button>
                                <span>小计:{item.money}元</span>
                            </div>
                        })
                    }
                </div>
                <div>
                    总价:<span>{this.state.allprice}元</span>
                </div>
            </div>
        )
    }
}

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何解决 Git 默认不区分文件名大小写和同名文件共存?

修改文件命名的大小写&#xff0c;不会有 git 记录 本文章的例子&#xff1a;将 demo.vue 文件命名改为 Demo.vue 1、在Git项目路径下执行该命令 git config core.ignorecase false &#xff08;1&#xff09;以上方法可以实现 git 区分 demo.vue 与 Demo.vue 文件&#xff0…

【投稿优惠|权威主办】2024年物联网、土木建筑与城市工程国际学术会议(ICITCEUE 2024)

2024年物联网、土木建筑与城市工程国际学术会议&#xff08;ICITCEUE 2024&#xff09; 2024 International Academic Conference on the Internet of Things, Civil Engineering and Urban Engineering&#xff08;ICITCEUE 2024&#xff09; ▶会议简介 2024年物联网、土木建…

【解读】核密度图

def&#xff1a;what 核密度估计&#xff08;Kernel Density Estimation&#xff0c;简称KDE&#xff09;是一种用来估计随机变量概率密度函数的非参数方法 实现&#xff1a;&#xff08;库函数&#xff09;how import seaborn as sns import matplotlib.pyplot as plt# 使用…

开源完全自动化的桌上足球机器人Foosbar;自动编写和修复代码的AI小工具;开源工具,可本地运行,作为Perplexity AI的替代方案

✨ 1: Foosbar Foosbar是一款完全自动化的桌上足球机器人&#xff0c;能与人类玩家对战&#xff0c;具备防守、传球和射门能力。 Foosbar是一个完全自动化的桌上足球机器人&#xff0c;它实现了一侧由机器人控制&#xff0c;另一侧由人类玩家对战的游戏模式。这个机器人能够自…

2024下半年软考高级没有高项,考哪门最容易上岸?

2024上半年软考考试已经结束&#xff0c;有不少小伙伴已经开始准备下半年软考了&#xff0c;但是大家要注意&#xff1a;今年高项仅考上半年一次&#xff0c;下半年考的高级科目只有这四个&#xff08;系分、架构、网规、系规&#xff09;&#xff01; 一、那么这种情况下&…

go语音进阶 多任务

多任务 什么叫 多任务&#xff1f;简单说&#xff1a;就像是操作系统可以同时执行 多个任务。打个比方 你一边使用 浏览器上网&#xff0c;一遍在听MP3, 一边再用 word 赶作业。对于电脑来讲这就是多任务&#xff0c;还有很多任务悄悄的在后台同时运行着&#xff0c;只是桌面上…

npm 添加 electron 安装镜像变量,提交打包速度。

前言&#xff1a;项目中使用 electron-builder&#xff0c;打包运行 npm run build:win 时&#xff0c; electron-builder 默认会从 github 下载 electron 依赖包&#xff0c;导致打包缓慢。可以通过添加 electron 下载镜像地址来解决。 npm config ls -l 查看 npm 所有配置 …

SmartEDA:革新教育电路,点亮学生创新之光!

在当今快速发展的科技时代&#xff0c;电路设计与电子技术的融合已成为教育领域不可或缺的一部分。而SmartEDA作为一款新兴的电路设计工具&#xff0c;正以其独特的优势助力学生创新实践&#xff0c;引领教育界迈向更加智能化的未来。 SmartEDA不仅具备传统电路设计软件的基本…

Redis(十六) 集群

文章目录 前言什么是集群集群模式基本原理哈希求余一致性哈希算法哈希槽分区算法 docker模拟出一个集群集群中节点挂了会怎么办故障判定故障迁移 集群扩容 前言 前面我们学习了 redis 哨兵机制&#xff0c;哨兵机制是为了解决当主节点挂了之后&#xff0c;能够自动进行故障转移…

JVM对象分配和垃圾回收机制

一、对象创建 1.1 符号引用 new 创建一个对象&#xff0c;需要在JVM创建对象。 符号引用&#xff1a;目标对象采用一个符号表示&#xff0c;类A加载的时候&#xff0c;如果成员变量类B还没有被加载进来&#xff0c;采用一个符号&#xff08;字面量&#xff09;来表示&#x…

Linux C语言:指针的运算

一、指针的算术运算 1、指针运算 指针运算是以指针所存放的地址作为运算量而进行的指针运算的实质就是地址的计算 2、指针的算数运算 指针加上整数&#xff0c;指针减去整数, 指针递增&#xff0c;指针递减和两个指针相减。 指针加减一个n的运算: px n px - n 移动步长…

LeetCode | 2879.显示前三行

在 pandas 中&#xff0c;可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行&#xff0c;可以在 head() 方法中传入一个参数 n&#xff0c;读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…

mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名

我们现在正常来看 一个mybatisplus正常的查询语句 我们可以看到 &#xff0c;再如上的代码中 我们使用了 Address&#xff1a;&#xff1a;getuserId 方法引用&#xff0c;但是我们把方法引用改成lambda表达式的形式的时候不会报错&#xff0c;但是运行的时候报错。为什么…

Tkinter 组件详解之Entry

Tkinter 组件详解之Entry Entry(输入框)组件通常用于获取用户的输入文本。 何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这意味着该字符串将不能被全部看到(你可以用鼠标或键盘的方向键调…

[2024-06]-[大模型]-[DEBUG]- ollama webui 11434 connection refused

报错&#xff1a;host.docker.internal:11434 ssl:default [Connection refused] 将/etc/systemd/system/ollama.service中加上如下红框两行 Environment"OLLAMA_HOST0.0.0.0" Environment"OLLAMA_ORIGINS*"然后 systemctl daemon-reload systemctl rest…

速卖通测评攻略:轻松提升店铺曝光度和吸引力

在速卖通平台上&#xff0c;产品排名&#xff0c;店铺曝光的提升无疑是所有卖家追求的目标&#xff0c;因为这直接关联着产品曝光量的增加和潜在销售机会的扩大。然而&#xff0c;提升产品排名并非一蹴而就&#xff0c;它需要一系列的策略和技巧。那么&#xff0c;接下来就让我…

【网络安全】跨站脚本攻击漏洞—HTML前端基础

目录 一、HTML概述 1.1 head部分 1.2 body部分 1.3 HTML特殊符号 二、JavaScript概述 2.1 HTML中JavaScript的存在方式 2.2 DOM操作 2.3 BOM操作 跨站脚本攻击&#xff08;Cross-site scripting&#xff0c;通常缩写为XSS&#xff09;是一种常见的网络安全漏洞&#xff…

区块链实验室(36) - 交叉编译Ethereum的客户端全套工具

停滞了一段时间&#xff0c;重新回到区块链实验。前面在“区块链实验室(31) - 交叉编译Ethereum的客户端Geth”中仅编译出客户端工具geth。编译Ethereum全套工具的代码如下。 #!/bin/bash ## abigen CGO_ENABLED0 GOOSlinux GOARCHarm64 /usr/local/go/bin/go build -ldflags …

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代&#xff0c;抖音小店以其独特的平台优势和庞大的用户基础&#xff0c;吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一&#xff0c;它的抖音小店究竟靠不靠谱呢&#xff1f;今天&#xff0c;我们就来一起揭开这个谜底。 首…

现货黄金交易多少克一手?国内外情况大不同

如果大家想参与国际市场上的现货黄金交易&#xff0c;就应该从它交易细则的入手&#xff0c;先彻底认识这个品种&#xff0c;因为它是来自欧美市场的投资方式&#xff0c;所以无论是从合约的计的单位&#xff0c;计价的货币&#xff0c;交易的具体时间&#xff0c;以及买卖过程…