模拟移动端美团案例(react版)

文章目录

    • 目录

      概述

      项目搭建

      1.启动项目(mock服务+前端服务)

      2.使用Redux ToolTik(RTK)编写store(异步action)

      3.组件触发action并渲染数据

      一、渲染列表

      ​编辑

      二、tab切换类交互

      三、添加购物车

      四、统计区域功能实现

      五、购物车列表功能实现

      六、控制购物车的显示与隐藏


概述

基本开发思路:使用Redux Toolkit管理应用状态,组件负责数据渲染和通过dispatch方法提交action对象信息。

实现功能:其中包括商品列表和分类渲染;添加商品;购物车操作以及订单数量统计和高亮显示。

项目搭建

1.启动项目(mock服务+前端服务)

启动 mock服务:npm run serve

启动前端服务:npm run start

2.使用Redux ToolTik(RTK)编写store(异步action)

3.组件触发action并渲染数据

技术细节

一、渲染列表

1.在store文件夹下modules文件夹内的takeaway.js子模块中存储列表数据,使用createSlice方法简化创建Redux reducer 和 action的过程。(createSlice接受一个对象作为参数,该对象包含了slice的名称、初始状态和reducer函数。)首先我们要做的是将需要渲染的foodsList列表的初始状态设置为一个空数组,并且在reducer函数中添加一个修改原始状态的同步方法setFoodsList()。 

紧接着,我们需要封装一个异步请求来获取数据,(异步请求数据,通过dispatch来提交action对象),调用修改原始状态的setFoodsList同步方法将获取到异步的数据作为为参数后生成的action对象,通过dispatch方法提交。

然后将创建action对象的函数以及reducer函数从createSlice方法中解构出来并导出。

2.在store文件夹下的index.js文件中,使用React ToolKit中的configureStore方法简化store的设置和配置。其中,configureStore接受一个对象,其中的一个reducer字段是一个对象,包含应用程序的所有reducer。

3.为React注入store,内置Provider组件通过store参数把创建好的store实例注入到应用中,react 和redux链接正式建立。在全局index.js文件中引入当前store并完成注入。

4.React组件使用store中的数据,使用useSelector钩子函数将store中的数据映射到组件中。紧接着再使用useDispatch钩子函数提交action对象中的dispatch函数。其中,想要得到action对象,就要执行store模块中导出的actionCreator方法。使用useEffect Hook来调用接口,因为这里使用了 dispatch作为依赖项,所以我们会发现接口被调用了两次,这是因为依赖项发生改变的时候,也会重新调用一次接口。

5.渲染商品列表信息

6.渲染商品列表信息结果展示:

二、tab切换类交互

思路:记录当前点击项(activeIndex),动态控制激活类名(activeIndex === index)

1.在store仓库(takeaway.js文件)中初始化activeIndex菜单下标值为0,构建修改原始状态changeActiveIndex方法,解构创建action对象的函数changeActiveIndex并导出

2.在全局文件App.js下使用React Hook函数useSelector获取activeIndex状态,当用户点击当前tab标签时,展示相应的商品列表信息。

结果展示:

三、添加购物车

思路:使用RTK管理新状态cartList;如果添加过,那么只更新新数量,如果没有添加,那么就push进去;在组件中点击时收集新数据提交action添加购物车。

1.添加cartList购物车列表

2.添加创建action对象的方法,修改原始state状态数据的同步方法

3.在组件中使用

引入修改状态方法addCartList,引入react的useDispatch Hook函数并使用

在组件需要的地方定义点击事件并调用dispatch函数提交action对象,使用修改原始状态的方法addCartList传入参数对象如下:

结果如下:

当我们点击一人套餐下的首个子菜单的“+”号时,所产生的的count次数可到Redux检查视图中查看,随着我点击次数的增加,count数量也逐渐上升。(count初始值为1)

当我在上面的基础上重新点另一个子菜单时,我们会发现新的对象会被添加到这个addCartList数组中去。

四、统计区域功能实现

功能:(1)实现购物车数量和总价的统计 (2)实现下单后显示高亮的功能

思路:基于store中的购物车列表信息cartList的length渲染数量;基于store中cartList累加price*count;购物车cartList的length不为0那么就高亮显示。

1.未加购前购物车的状态如图所示:

2.实现购物车的数量统计

调用useSelector Hook来获取数据,从store仓库中导入cartList购物车列表并渲染页面。

统计购物车数量的总金额,这里用到数组的累加器reduce方法,将总金额初始值设置为0

渲染购物车价格,并使用数组的toFixed方法保留值到小数点后2位

当购物车列表信息不为空(即cartList不为空数组时),那么就高亮显示这个购物车

最后结果为:(此处点了两份烤羊肉串和一份腊味煲仔饭)

五、购物车列表功能实现

功能:(1)控制列表渲染(2)购物车增减逻辑实现(3)清空购物车实现

思路:使用cartList遍历渲染列表;RTK中增减reducer,组件中提交action;RTK中增加清除购物车reducer, 组件中提交action

1.在store仓库中添加addMenu新增菜单,decreMenu减少菜单以及清空购物车clearMenu并解构导出

2.然后来到子组件Card中引入并渲染

3.结果展示:以下是点了份藤椒鸡肉串和一份烤羊排

六、控制购物车的显示与隐藏

功能:点击统计区域,购物车列表显示;点击蒙层区域时,购物车和蒙层隐藏

思路:使用useState声明控制显示隐藏的状态;点击统计区域设置状态为true;点击蒙层区域设置状态为false

1.使用React Hook钩子函数useState来管理visible状态来控制购物车和蒙层隐藏,其中setVisible是用来修改visible状态的。

2.在蒙层使用visible状态,当蒙层的类名是visible时,遮罩层可显示出来

当购物车列表不为空时(即cartList数组不是空数组)隐藏遮罩层。即visible的值为true,这里防止出现购物车列表为空时遮罩层的出现就写了个onShow的方法,在组件渲染时调用即可。

最终结果展示:添加好菜单选项后点击左下角可视遮罩层以及菜单的显示。

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

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

相关文章

Leetcode算法训练日记 | day23

一、修剪二叉搜索树 1.题目 Leetcode:第 669 题 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff…

2024/4/2—力扣—最小高度树

代码实现: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ struct TreeNode* buildTree(int *nums, int l, int r) {if (l > r) {return NULL; // 递归出口}struct…

Cohere推出全新升级版RAG大型AI模型:支持中文,搭载1040亿参数,现开源其权重!

4月5日,知名类ChatGPT平台Cohere在其官方网站上发布了一款全新的模型——Command R。 据官方消息,Command R拥有1040亿个参数,并且支持包括英语、中文、法语、德语在内的10种语言。这一模型的显著特点之一在于其对内置的RAG(检索增…

文件加密软件大全,按市场份额排名

文件加密软件大全,按市场份额排名 文件加密是一种保护数据安全的重要手段,通过使用特定的算法将明文文件转化为密文,以防止未经授权的访问、篡改或泄露,市场份额排名的八款软件你需要了解一下。 1、安企神软件 专注于加密和审计…

高阶流程图(SIPOC)

SIPOC高阶流程图是一种流程映射和改进方法,它使用可视化的方式描述一个或多个流程的输入和输出。SIPOC是五个单词的首字母缩写,分别代表供应商(Suppliers)、输入(Inputs)、过程(Processes&#…

蓝牙app设计 (方案一)app inventor

app Inventor是一款谷歌公司开发的手机编程软件。 谷歌推出一款名叫Google App Inventor的工具软件, Google App Inventor用户能够通过该工具软件使用谷歌的Android系列软件自行研发适合手机使用的任意应用程序。 而且这款编程软件不一定非要是专业的研发人员,甚至根本不需要…

2024 年最新前端工程师使用 Webpack 模块打包工具详细教程(更新中)

概述 Webpack 模块打包工具 Webpack 是一个现代的静态模块打包工具,用于将前端应用程序的各种资源(例如如:JavaScript、CSS、图片等)视为模块,并将它们打包成可以在浏览器中运行的静态文件。它的主要功能包括模块打包…

CUDA 12.4文档3 内存层次异构变成计算能力

5.3 内存层次 Memory Hierarchy CUDA线程在执行过程中可能会访问多个内存空间的数据,如图6所示。每个线程都有自己的私有本地内存。 每个线程块都有一个对块内所有线程可见的共享内存,并且其生命周期与块相同。线程块集群中的线程块可以对彼此的共享内…

中颖51芯片学习5. 类EEPROM操作

中颖51芯片学习5. 类EEPROM操作 一、SH79F9476 Flash存储空间1. 特性2. 分区3. OP_EEPROMSIZE选项设置3. 编程接口4. 代码保护控制模式简介(1)**代码保护模式0:**(2)**代码保护模式1:**(3&#…

ESXI 中安装 虚拟机 麒麟v10 操作系统

浏览器访问登录ESXI 上传镜像文件 创建新虚拟机 选择虚拟机名称和操作系统 选择存储 配置虚拟机 配置虚拟机 cpu 内存 硬盘 并选择虚拟机驱动 配置完成后,点击下一步,并点击完成。 开机 完成后选择该虚拟机,并打开电源 等待出现以下界面…

2023年通用人工智能AGI等级保护白皮书

今天分享的是人工智能专题系列深度研究报告:《人工智能专题:2023年通用人工智能AGI等级保护白皮书》。 通用人工智能发展现状 本章主要介绍通用人工智能的基本情况,包括其发展历史、现状以及组成架构等内容。本文还将通过从技术角度出发来分…

【复现】浙大恩特客户资源管理系统 SQL注入漏洞_71

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升…

Innodb架构解析

整体架构 通过《面试官:一条SQL是如何执行的?》我们了解了MySQL架构,下面我们看下Innodb架构。 innodb最早由Innobase Oy公司开发,5.5版本开始是MySQL默认存储引擎,该存储引擎是第一个完整支持ACID事务的MySQL存储引…

蓝桥杯-【二分】分巧克力,跳石头

代码及解析: #include<bits/stdc.h> using namespace std; int n,k; const int N100010; int h[N],w[N]; bool check(int d){int num0;for(int i0;i<n;i) num (h[i]/d)*(w[i]/d);if(num>k) return true; //够分else return false; //不够分 } in…

Golang教程一(环境搭建,变量,数据类型,数组切片map)

目录 一、环境搭建 1.windows安装 2.linux安装 3.开发工具 二、变量定义与输入输出 1.变量定义 2.全局变量与局部变量 3.定义多个变量 4.常量定义 5.命名规范 6.输出 7.输入 三、基本数据类型 1.整数型 2.浮点型 3.字符型 4.字符串类型 转义字符 多行字符…

深度学习简介

深度学习简介 一、引言&#xff1a;深度学习的兴起 简短介绍深度学习的历史背景 深度学习&#xff0c;作为人工智能领域的一颗冉冉升起的新星&#xff0c;其根源可以追溯到上世纪的感知机学习算法。这种算法模拟人类的神经元行为&#xff0c;是最早期的尝试之一。然而&#x…

OpenLayers6实战,OpenLayers实现鼠标拖拽方式绘制矩形(拖拽方式绘制长方形和正方形)

专栏目录: OpenLayers实战进阶专栏目录 前言 本章介绍使用OpenLayers在地图上实现鼠标拖拽方式绘制矩形(拖拽方式长方形和正方形)。 OpenLayers本身是可以通过鼠标点击多个点的方式来绘制多边形的,当然也包括长方形和正方形,但是这种多边形绘制出来的图形并不是准确的“…

每天学点儿Python(6) -- 列表和枚举

列表是Python中内置的可变序列&#xff0c;类使用C/C中的数组&#xff0c;使用 [ ] 定义列表&#xff0c;列表中的元素与元素之间用英文逗号&#xff08; , &#xff09;分隔&#xff0c; 但是Python中列表可以存储任意类型的数据&#xff0c;且可以混存&#xff08;即类型可以…

Partisia Blockchain 何以落地隐私技术的高能场景应用?

致力于隐私保护、互操作性和可持续创新的 Layer1 区块链新星&#xff0c;Partisia Blockchain 以安全公平标榜&#xff0c;带给加密用户无忧交易的体验环境。对于这样一个融合零知识证明&#xff08;ZK&#xff09;技术和多方计算&#xff08;MPC&#xff09;的全新项目来说&am…

18_SPI通信外设

SPI通信外设 SPI通信外设SPI外设简介SPI框图SPI基本结构主模式全双工连续传输非连续传输 SPI通信外设 SPI外设简介 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担 可配置8位/16位数据帧、高位先行/低位先…