React之购物车+动态获取参数+Hooks+Redux

news2024/9/21 20:29:26

1、redux-logger中间件

 

1️⃣:安装redux-logger依赖包

 yarn add redux-logger

2️⃣:在store的配置文件index中配置

 import {legacy_createStore as applyMiddleware,applyMiddleware} from 'redux'
 import counterReducer from './counterReducer'
 import {composeWithDevTools} from 'redux-devtools-extension'
 import logger from 'redux-logger'
 const store=createStore(counterReducer,composeWithDevTools(applyMiddleware(logger)))
 export default store

购物车

1️⃣:在actionType.js文件中编写代码

 export const GETSHOPCARLIST = 'getShopCarList'

2️⃣:在action文件下创建shopAction.js,action是一个对象,里面有个type属性,,主要是组件通过type来通知action需要更新数据。

 import * as actionTypes from './actionTypes'
 export const getShopCarList = (payload)=>({type:actionTypes.GETSHOPCARLIST,payload})

⚠️:payload为组件传的值

3️⃣:编写reducer,reduce响应action通知对象,经过处理,将通过return 将state发送给store

 import * as actionTypes from '../action/actionTypes'
 const shopCarReducer = (state={
     shopcarList:[]
 },action)=>{
     switch(action.type){
         case actionTypes.GETSHOPCARLIST:
             return {...state,shopcarList:action.payload}
         default:
             return state
     }
 }
 export default shopCarReducer

⚠️:...state解构,将action中的值赋给shopcarList

4️⃣:在组件中分别入Hooks组件:useSelector``useDispatch

useDispatch:调用useDispatch(),可以直接获取到dispatch方法,用来发送action

useSelector:参数为回调函数,在回调函数中可以获取到仓库的状态,然后通过return出数据,用一个变量来接,然后正常使用

 import React ,{useEffect,useMemo,useRef}from 'react'
 import {useDispatch, useSelector} from 'react-redux'
 export default function ShopCar(){
     const dispatch = useDispatch()
     const list = useSelector((state)=>{
            return  state.shopCart.shopcarList
     })
   return (
     <div>
         <Table columns={column} dataSource={list} rowKey={'_id'} bordered={true} pagination={false}></Table>
         <div>总价:{totalPrice}</div>
     </div>
   )
 }

⚠️:通过useEffect,调用dispatch(getShopCarListAsync)获取购物车列表内容

5️⃣编写thunk的异步方法

  • 安装redux-thunk依赖

 yarn add reduc-thunk
  • 导入thunk

 import thunk from 'redux-thunk'
  • 使用thunk

 const store=createStore(bigReducer,composeWithDevTools(applyMiddleware(thunk)))

redux的作用:让dispatch方法能够接收函数作为参数

6️⃣:编写redux-logger

 import logger from 'redux-logger'
 const store=createStore(counterReducer,composeWithDevTools(applyMiddleware(logger)))

redux-logger是为了打印日志,记录日志

7️⃣:在store入口文件引入shopReducer,并且将shopReducer放入createStore函数中.

 import {legacy_createStore as createStore,applyMiddleware,combineReducers} from 'redux'
 import shopCarReducer from './shopReduce/shopReduce'
 const bigReducer = combineReducers({
     shopCart:shopCarReducer
 })
 const store=createStore(bigReducer,composeWithDevTools(applyMiddleware(logger,thunk)))
 export default store

8️⃣:将store注册到全局,使用Redux的Provider,

 import { Provider } from 'react-redux'
 root.render(
     <Provider store={store}>
         <App></App>
     </Provider>
 )

Redux的Provider是React-Redux库提供的一个组件,它可以将Redux store传递给整个React应用程序。在使用React-Redux时,我们需要在应用程序的最顶层使用Provider组件,以便所有的子组件都能访问到Redux store中的状态数据。

9️⃣编写shopAsync异步文件

  • 导入axios

 import axios from "axios"
  • 导入shopAction文件

 import {getShopCarList} from '../action/shopAction'
  • 编写thunk的异步方法

 export const getShopCarListAsync = async(dispatch,getState)=>{
         const {data:{data}} = await axios.get('http://www.zhaijizhe.cn:3001/shopcart/getShopcartData') 
         dispatch(getShopCarList(data))
 }

reudx-thunk的异步方法是异步回调函数

该回调函数参数说明如下

第1个参数:dispatch对象(是redux原生的dispatch对象)

第2个参数:getState():获取store仓库中的state的方法

⚠️: dispatch(getShopCarList(data))将获取到的列表数据传给action,action接收到值后通过shopReducer将值保存到仓库中

🔟:改变数量的方法

  • 在shopAsync异步文件中编写改变数量的异步方法

export const changeCheckedAsync = (arg)=>{
  return async(dispatch,getState)=>{
         console.log('arg',arg);
         const result = await axios.get(`http://www.zhaijizhe.cn:3001/shopcart/checkProducts?_id=${arg}`)
         console.log(result.data.code);
         if(result.data.code==1){
             console.log(123);
         dispatch(getShopCarListAsync)
         }
     }
 }

组件dipatch发送action需要传值后,因为reudx-thunk接受值为dispatch,getState,但是调用接口需要传参,这时就需要将changeCheckedAsync改造为回调函数,这样子就能接受到组件传来的值,然后将异步请求函数return出去

11:编写勾选的异步代码:

 export const changeCheckedAsync = (arg)=>{
  return async(dispatch,getState)=>{
         console.log('arg',arg);
         const result = await axios.get(`http://www.zhaijizhe.cn:3001/shopcart/checkProducts?_id=${arg}`)
         console.log(result.data.code);
         if(result.data.code==1){
             console.log(123);
         dispatch(getShopCarListAsync)
         }
     }
 }

12:组件代码遇到的问题

  1. 在使用antd-design中的Input组件,需要获取Input的值,通过useRef来获取值

  {
     title:'输入购买量',
     width:'150px',
      render:(text)=>{
       return <Input style={{width:'150px'}}  defaultValue={text.num} ref={inputnum}  onBlur={()=>{NumInput(text._id)}}></Input>
    }
 },

这里需要注意的是用的是onBlur事件

  1. Table组件中获取该行的值,通过text参数,参数text拿到的是该行的对象

 title:'小计',
 align:'center',
 render:(text)=>{
   let data = text.price*text.num
    return data.toFixed(2)
 }

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

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

相关文章

【论文写作】-我的第一篇论文形成记(投稿过程、课题来源、python与数学学习、实验设计、论文思路建立与写作、回复审稿人)

我的第一篇论文形成记 投稿过程背景记录课题来源-本科毕业设计python及数学学习实验设计调参阶段实验阶段 论文思路建立论文写作回复审稿人总结 投稿过程 2022年12月28日 投AIChE 2023年01月05日 AlChE编辑认为方向不太符合期刊定位&#xff0c;建议投其他期刊 2023年01月06日…

SpringCloud_服务调用OpenFeign和断路器Resilience4J

文章目录 一、负载均衡概论1、服务器负载均衡2、客户端负载均衡3、客户端负载均衡策略(SpringCloudRibbon)4、客户端负载均衡策略(SpringCloudLoadBalancer) 二、SpringCloudOpenFeign服务调用1、OpenFeign服务调用的使用2、OpenFeign服务调用的日志增强3、OpenFeign服务调用超…

Vector - CAPL - 检查DUT发出与dbc定义一致

目录 ChkCreate_UndefinedMessageReceived 代码示例 有回调函数 无回调函数 Trace报文 报告显示 ChkCreate_UndefinedMessage

一维离散小波变换原理和代码实现

基本原理&#xff1a; 离散小波变换&#xff1a;对连续小波变换的尺度因子和时移动因子采用不同的离散条件进行离散&#xff0c;得到Discrete Wavelet Transform(DWT)。降低计算量的同时&#xff0c;保持连续小波变换的光滑性、紧支性、对称性。 离散小波函数&#xff1a; ψ…

脚本函数基础

shell脚本编程系列 函数是一个脚本代码块&#xff0c;可以为其命名并在脚本中的任何位置重用它。每当需要在脚本中使用该代码块时&#xff0c;直接写函数名即可。称作调用函数。 创建函数 方式1&#xff1a; function name {commands }name定义了该函数的唯一名称&#xff0…

私有部署、重构企业软件,第四范式发布大模型“式说”

大模型领域再添重要一员&#xff01; 4月26日&#xff0c;第四范式首次向公众展示其大模型产品「式说3.0」&#xff0c;并首次提出AIGS战略&#xff08;AI-Generated Software&#xff09;&#xff1a;以生成式AI重构企业软件。式说将定位为基于多模态大模型的新型开发平台&…

ImageJ 用户手册——第五部分(菜单命令Process)

这里写目录标题 ImageJ 用户手册——第五部分29. Process29.1 Smooth29.2 Sharpen29.3 Find Edges29.4 Find Maxima29.5 Enhance Contrast29.6 Noise29.6.1 Add Noise29.6.2 Add Specified Noise29.6.3 Salt and Pepper29.6.4 Despeckle29.6.5 Remove Outliers29.6.6 Remove Na…

Shell编程条件语句 if case (愿此行终抵群星)

一、Shell条件语句 Shell环境根据命令执行后的返回状态值&#xff08;$?&#xff09;来判断是否执行成功&#xff0c;当返回值为0(真 true)时表示成功&#xff0c;返回值为非0值&#xff08;假 false)时表示失败或异常。 test 命令 更多操作可使用 man test 查看 1.条件表达式…

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras

深度学习论文分享&#xff08;二&#xff09;Data-driven Feature Tracking for Event Cameras&#xff08;CVPR2023&#xff09; 前言Abstract1. Introduction2. Related Work3. Method3.1. Feature Network3.2. Frame Attention Module3.3. Supervision 4. Experiments5. Con…

焕新时刻,移动云品牌升级燃动十一城

4月25日&#xff0c;在2023移动云大会上&#xff0c;移动云品牌形象全方位焕新&#xff0c;启用新品牌LOGO和品牌标语&#xff0c;在政府领导、院士专家、行业大咖等3000多位参会嘉宾见证下&#xff0c;吹响品牌进阶新号角。 24日晚&#xff0c;移动云品牌焕新亮灯仪式率先在苏…

C语言入门篇——指针篇

目录 1、指针 1.1内存地址 1.2基地址 1.3指针变量 2、指针类型 2.1指针-整数 2.2指针的解引用 3、特殊指针 3.1野指针 3.2空指针 4、指针运算 4.1指针-指针 4.2指针的关系运算 5、指针和数组 6、二级指针 7、指针数组 1、指针 1.1内存地址 内存是电脑上特别重…

剑指offer 26树的子结构

文章目录 题目详情分析判断A中有出现和B相同的结构和节点值递归主体&#xff0c;解决问题 完整代码总结 题目详情 树的子结构 输入两棵二叉树A和B&#xff0c;判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构&#xff0c; 即 A中有出现和B相同的结构和节…

合并两个有序链表

文章目录 1.题目描述2.解题思路方法1&#xff1a;方法2&#xff1a; 1.题目描述 题目链接&#xff1a;力扣21&#xff0c;合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2.解题思路 方法1&#xff1a;…

【python】多进程和多线程

【Python】多线程 概念 同一时间内能够执行多个任务 执行方式 并发&#xff1a;多个任务交替去运行 并发&#xff1a;多喝CPU中&#xff0c;多个任务是在多个CPU上运行的 一般来说&#xff1a;并发和并行是同时存在的&#xff0c;是操作系统自动调用的 实现方式 多进程实…

系统集成项目管理工程师 笔记(第九章:项目成本管理)

文章目录 9.1.1 成本与成本管理概念 329项目成本管理的过程 9.1.2 相关术语 331成本的类型&#xff08;6种&#xff09;应急储备与管理储备 9.2.3 项目成本管理计划制订的 输出 3349.3.1 项目成本估算的主要相关因素 335项目估算还需要考虑但 容易被忽视的 主要因素 9.3.2 项目…

随机森林(Random Forest)简单介绍

文章目录 随机森林&#xff08;Random Forest&#xff09;简单介绍1. 介绍2. 工作原理2.1 随机森林的基本原理2.1.1 随机采样2.1.2. 随机选特征2.1.3. 多数表决 2.2 随机森林的建模过程2.2.1. 建立多颗决策树2.2.2. 特征随机选择2.2.3. 样本随机选择2.2.4. 决策树训练与生成2.2…

发现【Stable-Diffusion WEBUI】的神奇插件:离线自动翻译中文提示词

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;提示词翻译&#xff08;Prompt Translator&#xff09;&#xff08;1.1&#xff09;尚需改进 &#xff08;零&#xff09;前言 本篇主要提到了WEBUI的提示词翻译插件&#xff0c;之前我说不喜欢联网的插件&a…

【单目标优化算法】沙猫群优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【011】pandas处理数据的作用_#py

pandas操作 1. 导入数据库2. 修改行列名2.1 修改列名2.2 修改行名 3. 按条件筛选3.1 根据条件筛选&#xff0c;提取所有信息3.2 根据条件筛选&#xff0c;提取某列或者某几列 4. 按某行某列提取信息4.1 获取信息4.2 更改具体的值 5. 合并5.1 单列并入大数据中&#xff08;方法一…

根据虚拟地址,如何求出页号和偏移量?

方法掌握 虚拟地址划分成虚拟页号和虚拟页偏移量。 物理地址同样可划分为物理页号和物理页偏移量 如何划分&#xff0c;关键点在于页面的大小。 假设给你一个十进制表示的地址20000&#xff0c;一个页面的大小为4KB&#xff0c;那么如何找出地址20000的具体位置呢&#xff1f…