React从入门到精通二

news2024/11/25 10:09:55

React从入门到精通之购物车案例

  • 1. 购物车需求说明
    • 使用到的data list
  • 2. 项目code

1. 购物车需求说明

在这里插入图片描述

  • list data展示到列表中
  • 每个item的通过±按钮来控制购买的数据量
  • 删除按钮可以删除当前的item
  • Total Price计算当前购物车的总的价格

使用到的data list

const books = [
    {
      id: 1,
      name: 'introduction to algorithms',
      date: '2006-9',
      price: 85.00,
      count: 1
    },
    {
      id: 2,
      name: 'The Art of UNIX Programming',
      date: '2006-2',
      price: 59.00,
      count: 1
    },
    {
      id: 3,
      name: 'Programming pearls',
      date: '2008-10',
      price: 39.00,
      count: 1
    },
    {
      id: 4,
      name: 'Complete code',
      date: '2006-3',
      price: 128.00,
      count: 1
    },
  ]  

2. 项目code

<!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>shop car demo</title>
  <style>
    table {
        border-collapse: collapse;
        text-align: center;
    }

    thead {
        background-color: #f2f2f2;
    }

    td, th {
        padding: 10px 16px;
        border: 1px solid #aaa;        
    }
  </style>
</head>
<body>

  <div id="root"></div>
  <!-- import react dependencies -->
  <script src="../../lib/react.js"></script>
  <script src="../../lib/react-dom.js"></script>
  <script src="../../lib/babel.js"></script>

  <!-- import data -->
  <script src="./data.js"></script>

  <script type="text/babel">
    
    // component App
    class App extends React.Component {
        constructor(){
            super()
            this.state = {
                books: books
            }

        }

        // add sum
        increment(index) {
            const newBooks = [...this.state.books]
            newBooks[index].count += 1
            this.setState({ books: newBooks })
        }

        // reduce sum 
        decrement(index) {
            const newBooks = [...this.state.books]
            newBooks[index].count -= 1
            this.setState({ books: newBooks })
        }

        /*
        delte item from table
        */
        deleteItem(index) {
            const newBooks = [...this.state.books]
            newBooks.splice(index, 1)
            this.setState({ books: newBooks })
        }

        render(){
            const { books } = this.state
            return (
                <div>
                    <table>
                        <thead>
                            <tr>
                                <td>Order</td>
                                <td>Name</td>
                                <td>Publish Date</td>
                                <td>Price</td>
                                <td>Bought Sum</td>
                                <td>Operation</td>
                            </tr>

                        </thead>
                        <tbody>
                            {
                                books.map((item, index) => {
                                    return (
                                        <tr key={ item.id }>
                                            <td>{ index + 1 }</td>
                                            <td>{ item.name }</td>
                                            <td>{ item.date }</td>
                                            <td>{ '$' + item.price }</td>
                                            <td>
                                                <button disabled={ item.count <=1 } onClick={ () => {this.decrement(index)} }>-</button>
                                                 { item.count }
                                                <button onClick={ () => {this.increment(index)} }>+</button>
                                            </td>
                                            <td>
                                                <button onClick={ () => {this.deleteItem(index)} }>Delete</button>
                                            </td>
                                        </tr>
                                    )
                                })
                            }
                        </tbody>
                    </table>
                    <h2>Total Price: $ {books.reduce((preValue, item) => preValue + item.count * item.price, 0)}</h2>
                </div>
            )
        }

    }

    // create react dom
    const root = ReactDOM.createRoot(document.querySelector("#root"))
    // dom render by react
    root.render(<App/>)
  </script>

</body>
</html>

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

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

相关文章

OAK相机深度流探测草莓距离

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

uniapp 悬浮窗(悬浮球、动态菜单、在其他应用上层显示) Ba-FloatBall

简介&#xff08;下载地址&#xff09; Ba-FloatBall 是一款在其他应用上层显示的悬浮球插件。支持展示菜单、拖动、自动贴边等&#xff1b;支持自定义样式。 支持添加展示菜单&#xff0c;可自定义&#xff08;不添加菜单&#xff0c;可只显示悬浮球&#xff09;支持自定义悬…

一口吃不成ChatGPT,复旦版MOSS服务器被挤崩后续

ChatGPT 是目前最先进的 AI&#xff0c;由于 ChatGPT 的训练过程所需算力资源大、标注成本高&#xff0c;此前国内暂未出现对大众开放的同类产品。 适逢ChatGPT概念正火&#xff0c;2 月 21 日&#xff0c;复旦团队发布首个中国版类 ChatGPT 模型「MOSS」&#xff0c;没想到瞬时…

Python-生成列表

1.生成列表使用列表前必须先生成列表。1.1使用运算符[ ]生成列表在运算符[ ]中以逗号隔开各个元素会生成包含这些元素的新列表。另外&#xff0c;如果[ ]中没有元素就会生成空列表示例>>> list01 [] >>> list01 [] >>> list02 [1, 2, 3] >>…

云、安全、网络三位一体,Akamai 推出大规模分布式边缘和云平台 Akamai Connected Cloud

出品 | CSDN 云计算 云服务市场规模在持续增长。 基于网络技术积累与优势&#xff0c;与布局边缘计算之后&#xff0c;巨头 Akamai 在继续推进它的技术与产品进程。近日&#xff0c;Akamai 正式推出大规模分布式边缘和云平台 Akamai Connected Cloud&#xff0c;包含云计算、安…

软考学习笔记(题目知识记录)

答案为 概要设计阶段 本题涉及软件工程的概念 软件工程的任务是基于需求分析的结果建立各种设计模型&#xff0c;给出问题的解决方案 软件设计可以分为两个阶段&#xff1a; 概要设计阶段和详细设计阶段 结构化设计方法中&#xff0c;概要设计阶段进行软件体系结构的设计&…

学生管理系统-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

【案例6-2】 学生管理系统 【案例介绍】 1.任务描述 在一所学校中&#xff0c;对学生人员流动的管理是很麻烦的&#xff0c;本案例要求编写一个学生管理系统&#xff0c;实现对学生信息的添加、删除、修改和查询功能。每个功能的具体要求如下&#xff1a; 系统的首页&#…

视频技术基础知识

一、视频图像基础 像素&#xff1a;图像的基本单元&#xff0c;即一个带有颜色的小块分辨率&#xff1a;图像的大小或尺寸&#xff0c;用像素个数来表示。原始图像分辨率越高&#xff0c;图像就越清晰位深&#xff1a;存储每位像素需要的二进制位数&#xff1b;位深越大&#…

JAVA线程入门简介

线程入门简介什么是程序?什么是进程?什么是线程&#xff1f;单线程与多线程并发与并行线程的使用用java查看有多少个cpu创建线程的两种方式继承Thread类&#xff0c;重写run方法实现Runnable接口&#xff0c;重写run方法多线程机制为社么是start?源码解析什么是程序? 是为完…

防错料使用二维码解决方案 生产过程物料防错管理

生产过程中&#xff0c;物料的防错管理是非常重要的一环。它能够有效地防止物料错用或混用&#xff0c;从而降低产品质量问题的发生率&#xff0c;减少生产成本和生产周期&#xff0c;提高生产效率和产品质量。以下是生产过程物料防错管理的具体措施&#xff1a;1.明确物料标识…

SpringBoot Data Redis来操作Redis

SpringBoot Data Redis来操作Redis1、Redis启动Redis主要的作用安装的位置启动2、Java中来操作Redis3、Spring Data Redis(重点)测试连接配置Redis序列化器redisTemplate操作常见数据类型通用操作&#xff0c;针对不同的数据类型都可以操作申明&#xff1a; 未经许可&#xff0…

浅谈Springboot自动化配置原理

文章目录1.前言2.SpringBoot的入口3.SpringBootApplication背后的秘密4.Configuration5.ComponentScan扫描bean6.EnableAutoConfiguration7.自动配置生效1.前言 不论在工作中&#xff0c;亦或是求职面试&#xff0c;Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政…

java面试题-JUC线程池

1.FutureTask的作用?FutureTask 是 Java 并发编程中的一个类&#xff0c;用于异步执行任务并获取其结果。它实现了 Future 和 Runnable 接口&#xff0c;因此可以作为一个可运行的任务提交给 Executor 执行&#xff0c;也可以通过 Future 接口获取任务执行的结果。FutureTask …

2023年DAMA-CDGA/CDGP数据治理认证选择哪家机构好?

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

将整数数组变为浮点型数组的np.asfarray()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将整数数组转换为浮点型数组 np.asfarray() 选择题 关于以下代码说法错误的一项是? import numpy as np a1 np.array([1,2,3]) print("【显示】a1",a1) print("【执行】a…

网络工程(一) 简单的配置

网络工程 简单的配置 需求 两台交换机 两台路由器 两台PC AR1配置静态路由 system-view [HUAWEI]sysname ar1 [ar1]interface g 0/0/0 [ar1-G…0/0/0]ip address 192.168.2.1 24 [ar1-G…0/0/0]quit [ar1]interface g 0/0/1 [ar1-G…0/0/1]ip address 192.168.3.1 24 [ar1-G…

关于学习git时的一些疑惑与笔记

关于学习git时的一些疑惑与笔记SSH相关问题SSH是什么&#xff1f;SSH有什么作用&#xff1f;如何在github配置SSH?分支什么是本地分支&#xff0c;远程分支&#xff1f;main主分支与master主支&#xff1f;为什么要把master分支修改为main分支&#xff1f;什么时候用分支&…

Java线程——常见方法

一、 常见方法 1.1 概述 ① start_vs_run&#xff1a;直接调用run方法并不会启动新的线程 import cn.itcast.n2.util.FileReader; import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.Test") public class Test {public static void main(String[] args) {Thread t…

【网络安全】Windows系统安全实验

第3模块 Windows操作系统安全部分 3.1 帐户和口令的安全设置 3.1.1 实验目的 本章实验的目的主要是熟悉Windows操作系统中帐户和口令的安全设置&#xff0c;掌握删除、禁用帐户的方法&#xff0c;了解并启用密码策略和用户锁定策略&#xff0c;体验查看“用户权限分配”、…

如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重点说一说如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序。相信大家在Windows环境下写C程序编译C程序运行C程序怎么弄都已经很清楚了&#xff0c;现在我们来看在Linux下如果来做&#xff…