React,来个小案例总结一下

上集精彩

回顾上集:

上集俺讲到了Zustand的使用。

本集继续

😁😁😁,老铁们,俺又来继续唠叨了,别嫌俺烦哈,俺尽量少烦点

美团案例

静态页面不想一步步来的话,可以下载源码:链接:pan.baidu.com/s/1v7ZRxHBb...;

  • 下载其他的所需依赖:有不知道的可上网查
cmd 复制代码
npm i axios json-server lodash zustand
  • 添加虚拟服务指令:
json 复制代码
"scripts": {
    "serve": "json-server --watch server/data.json --port 3001"
  },

展示商品列表

  • 状态管理 zustand
cmd 复制代码
npm install immer

在App.js中引入并log下,看看效果:能行😎(下图商品列表是死数据)

  • 启动服务:
cmd 复制代码
npm run serve
  • 展示列表:将 foodsList替换为 categories

左侧菜单

  • 菜单组件 Menu ,由于右侧已经获得到了列表数据,就不用再菜单组件 Menu 中再获取重新获取一次了,会给后台服务造成负担的,可以通过父传子组件通信来传递给菜单组件 Menu 值:
  • 状态管理菜单激活值activeIndex,并定义一个点击菜单项时该值会发生变化的动作:
  • 在Menu组件中添加下图两段代码:

点击各个菜单项后,控制台会输出相应的index值,并且同步持久化。

  • 动态更新菜单项类名样式:判断activeIndex是否等于当前的index:
js 复制代码
// Menu/index.js
className={classNames(
              "list-menu-item",
              activeIndex === index && "active"
            )}
  • 将持久化存储修改下,只存储菜单激活 activeIndex
js 复制代码
// store/modules/categorySlice.js
{
          name: "categorySlice",
          partialize: (state) => ({ activeIndex: state.activeIndex }),
          storage: createJSONStorage(() => sessionStorage)
        }
  • 菜单项对应的商品列表切换显示:如果activeIndex === index && 商品列表视图:

添加购物车实现

  • 点击 + 号添加当前商品到购物车列表中,需要对购物车列表进行状态管理:
  • 在FoodItem组件中的加号添加点击事件:

购物车数量和总价显示

  • 计算总价price*count:
  • 购物车高亮显示:
  • 结算起送判断:

购物车列表实现

  • 购物车列表渲染:直接把cart改为carts就行了,再添加个类名visible
  • 修改carts里的count:添加增和减的操作,还有清空的操作
  • 显示和隐藏购物车:点击购物车显示购物车列表,点击遮罩层隐藏购物车列表
js 复制代码
// Cart/index.js
// 控制购物车显示与隐藏
  const [visible, setVisible] = useState(false);

{/* 遮罩层 添加visible类名可以显示出来 */}
      <div
        className={classNames("cartOverlay", visible && "visible")}
        onClick={() => setVisible(false)}
      />

{/* 购物车数量 */}
        <div
          onClick={() => setVisible(true)}
          className={classNames("icon", carts.length > 0 && "fill")}
        >
                     
{/* 添加visible类名 div会显示出来 */}
      <div className={classNames("cartPanel", visible && "visible")}>

下集精彩

好了,完事,歇歇了😫

下篇俺会讲到哪些知识点呢: 如有不当的地方,原谅解。只要懂得这篇的知识点就很棒了。

  • React Router;
  • CSS Module;
相关推荐
JELEE.7 分钟前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl2 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫4 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友4 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理5 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻6 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
mapbar_front6 小时前
在职场生存中如何做个不好惹的人
前端
牧杉-惊蛰7 小时前
纯flex布局来写瀑布流
前端·javascript·css
一袋米扛几楼988 小时前
【软件安全】什么是XSS(Cross-Site Scripting,跨站脚本)?
前端·安全·xss
向上的车轮8 小时前
Actix Web适合什么类型的Web应用?可以部署 Java 或 .NET 的应用程序?
java·前端·rust·.net