第60节——使用redux-toolkit实战一个商品列表的增删查改

news2025/1/13 17:45:04

一、样例

img

二、需求

调用goods.js这个单例完成对goods数据的增删查改

class Goods {
  constructor() {
    const data = localStorage.getItem("qf-goods-data");
    this.goods = data ? JSON.parse(data) : [];
  }

  time = 500;

  /**
   * 获取商品
   * @returns
   */
  getGoods() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(this.goods);
      }, this.time);
    });
  }

  /**
   * 创建商品
   * @param {} params
   * @returns
   */
  createGoods(params) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (!params) {
          reject("不能不传");
          return;
        }
        console.log(params, this.goods);
        this.goods = [...this.goods, { ...params }];
        resolve("成功");
        this.keepData();
      }, this.time);
    });
  }

  /**
   * 传一个列表的下表
   * @param {*} index
   * @returns
   */
  delGoods(index) {
    return new Promise((resolve, reject) => {
      if (typeof index !== "number") {
        reject("必须传数值");
      }
      const goods = [...this.goods];
      goods.splice(index, 1);
      this.goods = goods;
      resolve();
      this.keepData();
    });
  }

  /**
   * 传一个下标 在传一个数据
   * @param {*} index
   * @param {*} data
   * @returns
   */
  updateGoods(index, data) {
    return new Promise((resolve, reject) => {
      if (typeof index !== "number") {
        reject("必须传数值");
      }

      const goods = [...this.goods];
      goods[index] = data;

      this.goods = [...goods];
      resolve();
      this.keepData();
    });
  }

  /**
   * 根据下标获取最新的数据
   * @param {*} index
   * @returns
   */
  getGoodsDetail(index) {
    return new Promise((resolve, reject) => {
      if (typeof index !== "number") {
        reject("必须传数值");
      }
      resolve(this.goods[index]);
    });
  }

  async keepData() {
    const data = await this.getGoods();
    localStorage.setItem("qf-goods-data", JSON.stringify(data));
  }
}

export default new Goods();

整个操作所有的逻辑放到redux中,页面只负责view层的渲染

ta", JSON.stringify(data));
}
}

export default new Goods();


### 整个操作所有的逻辑放到redux中,页面只负责view层的渲染

### 按照页面上出现的功能完成代码

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

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

相关文章

序列化和反序列化指令在PLC通信上的应用

在了解本篇博客之前,大家可以熟悉下序列化指令的相关介绍,详细内容如下: 博途PLC 1200/1500 PLC 序列化和反序列化指令编程应用_博图序列化和反序列化-CSDN博客序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输…

Apache Doris (四十四): Doris数据更新与删除 - Delete 数据删除

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

在 Python 脚本中设置环境变量

环境变量是与系统进程交互的一种深入方式; 它允许用户获得有关系统属性、路径和已经存在的变量的更详细信息。 我们如何使用环境变量 如上所述,环境变量促使我们与系统进程进行交互。 我们可以使用环境变量来访问系统中的所有变量和键。 为此&#xff…

Spring中构造注入详解

目录 一、构造注入是什么 二、构造注入重载 一、构造注入是什么 书接上回,我们已经知道了setter注入是什么了,这里的构造注入也就很好理解了。构造注入也就是Spring通过调用类对象中的构造方法来进行注入。接下来利用代码演示构造注入 1)先…

Elasticsearch系列组件:Beats高效的日志收集和传输解决方案

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性,可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…

上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走,深成指、创业板指均跌超1%,双双创出年内新低。转基因概念股逆势大涨…

C语言初学者工具选择:vscode + MSYS2 + cmake 搭建 C环境

文章目录 前言1. MSYS2 安装1. 下载安装包2. 安装3. pacman 换清华大学源4. 安装 mingw-w64 toolchain 和 cmake ninja5. 将 toolchain 加入系统环境变量 2. 设置 vscode1. 必要的插件2. 一个简单的 vscode cmake 项目 最后C数据结构与算法CMake 前言 网上关于使用 vscode 配…

Leetcode刷题详解——无重复字符的最长子串

1. 题目链接:3. 无重复字符的最长子串 2. 题目描述: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所…

C++11(包装器)

目录 一、function包装器 1、概念 2、function的引入 3、function 1、对函数指针包装 2、对函数对象进行包装 3、对lambda表达式进行包装 4、对类的成员函数进行包装 二、bind包装器 1、概念 2、bind 1、绑定全局函数 2、绑定成员函数 3、参数调换顺序 一、functi…

pinia下载使用时报错如何解决?

报错 可能是因为pnpm下载的时候版本出现了问题 更新pnpm的版本 一、windowr打开终端 输入pnpm -v检查是否是最新版本 如果是8.6.2的话 就更新 更新步骤如下: 二:打开pnpm下载的网盘位置 我的是在c盘 找到里面的用户文件夹 点击选择dell里面的App data文…

C语言 内存

内存分配 内存分配的类型 C/C中内存分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配:编译时分配,包括全局、静态全局、静态局部三种变量。 动态内存分配:运行时分配,包括栈&#x…

21天学会C++:Day15----STL简介

CSDN的uu们,大家好。这里是C入门的第十五讲。 座右铭:前路坎坷,披荆斩棘,扶摇直上。 博客主页: 姬如祎 收录专栏:C专题 目录 1. 什么是STL 2. STL的版本 3.STL的六大组件 4. STL的重要性 5. 如何学…

二叉树实现表达式求值(C++)

用二叉树来表示表达式,树的每一个节点包括一个运算符和运算数。代数表达式中只包含,-,*,/,(,)和一位整数且没有错误。按照先括号,再乘除,后加减的规则构造二叉…

【算法设计zxd】第6章 回溯法

目录 6.1 回溯法的设计技术 : 四皇后问题 回溯法: 算法框架: 思考题: 回溯算法的适用条件 【例6-1】求满足下列不等式的所有整数解: 6.2回溯算法的经典例题 【例6-2】装载问题  问题分析 计算模型  算法设计与描…

selenium多窗口、多iframe切换、alert、3种等待

1、多标签/多窗口之间的切换 场景: 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。这种情况下,需要识别多标签或窗口的情况。 操作方法: switch_to.window()方法:切换…

【AFL学习笔记(一)】简单的使用AFL进行漏洞挖掘测试

首先声明一点,ALF都是在Linux系统上运行 本文使用的是Ubuntu 20.4 版本进行演示 Step 1 下载afl-2.52b 官网地址afl2.52b 直接下载地址直接下载地址 下载完成之后在Ubuntu系统上进行解压: tar -afl-2.52b.tgzStep 2 创建测试用例 ①:创…

YOLOv5-训练自己的VOC格式数据集(VOC、自建数据集)

YOLOv5:训练自己的 VOC 格式数据集 1. 自定义数据集 1.1 环境安装 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple注意: 安装 lxmlPillow 版本要低于 10.0.0,解释链接: module ‘PIL.Image’ has no attri…

Amazon图片下载器:利用Scrapy库完成图像下载任务

概述 本文介绍了如何使用Python的Scrapy库编写一个简单的爬虫程序,实现从Amazon网站下载商品图片的功能。Scrapy是一个强大的爬虫框架,提供了许多方便的特性,如选择器、管道、中间件、代理等。本文将重点介绍如何使用Scrapy的图片管道和代理…

vue 使用crypto.js解密后,用JSON.parse转义报错非空白格解决办法

问题: 用JSON.parse转义crypto解密后的json字符串会发生错误。如图: 原因: 那是因为crypto自己加了一些未可见的字符,所以用正常的JSON.parse(xxxx)会报错。 解决办法: JSON.parse(xxxx.replace(/[\u0000-\u001F\u…

TX Text Control.NET 32.0 For WPF

TX Text Control 支持VISUAL STUDIO 2022、.NET 5 和 .NET 6 支持 .NET WPF 应用程序的文档处理 将文档编辑、创建和 PDF 生成添加到您的 WPF 应用程序中。 视窗用户界面 功能齐全的文档编辑器 TX Text Control 是一款完全可编程的丰富编辑控件,它在专为 Visual Stu…