React:第一次点击时状态未更新

2024-04-17

我正在制作购物车样本。

每次单击时,我都会将项目的对象添加到购物车数组中。 当我第一次单击“添加购物车”按钮时,它不会更新购物车,但第二次会更新。

不过,当我单击渲染器返回语句中的 viewCart 按钮时,它会显示购物车中的准确商品数量。 请参阅下面我的代码:

我需要能够在不单击 viewCart 按钮的情况下查看购物车中的准确商品数量。产品来自本地 JSON 文件,因此我认为 JSON 文件的加载没有任何问题。

constructor (props) {
    super(props);
    this.state = {
        Cart: []
    };
    this.addItem = this.addItem.bind(this);
}

addItem(productKey) {
    this.setState({ Cart: [...this.state.Cart, ProductsJSON[productKey]]})
    console.log(this.state.Cart);
}

viewCart() {
    console.log(this.state.Cart);
}

render() {
  const AllProducts = ProductsJSON;

  var Products = AllProducts.map((item) => {
    return (
            <div className="col-4" key={item.key} >
                <a onClick={() => this.addItem(item.key)} className="btn btn-primary btn-sm">Add to Cart</a>
            </div> 
        )
})

return (
        <div className="container">
            <div className="row">
                {Products}
                <a onClick={() => this.viewCart()} className="btn btn-primary btn-sm">viewCart</a>
            </div>
        </div>
    )
}

只是因为你没有看到它console.log并不意味着它不会正确渲染,这里的问题是setState is 异步,因此如果您立即 console.log 它,您将看不到它(console.log 将在状态更新之前执行),但如果您仍然想记录您的购物车,您可以这样做:

this.setState(
   { Cart: [...this.state.Cart, ProductsJSON[productKey]] },
   () => console.log(this.state.Cart)
)

一旦状态更新,setState 接受一个函数作为回调。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React:第一次点击时状态未更新 的相关文章

  • 节点异步循环 - 如何使该代码按顺序运行?

    我知道有几个关于此的帖子 但根据我发现的那些帖子 这应该可以正常工作 我想在循环中发出 http 请求 并且不希望循环迭代 直到触发请求回调 我正在使用异步库 如下所示 const async require async const req
  • 在 JavaScript 中计算不包括周末和节假日的天数

    我正在尝试编写一个代码 其中将计算总天数 不包括周末和自定义假期 我通过 stackoverflow 和 adobe 论坛进行搜索以找到解决方案 并提供了以下代码 如果公共假期恰逢工作日 周六至周三 则不计算在内 我的问题是 如果公共假期落
  • 应该使用encodeURI吗?

    javascript 的encodeURI 函数有任何有效用途吗 据我所知 当您尝试发出 HTTP 请求时 您应该 完整的 URI 您想要放入 URI 中的某些片段 可以是 unicode 字符串或 UTF 8 字节序列 在第一种情况下 显
  • 无法使用 Jade 模板包含相对路径文件

    当我尝试将文件包含在同一文件夹中时 收到以下错误 the filename option is required to use include with relative paths 有两个文件 索引 jade 项目列表 jade cont
  • 如何对像 Excel Pivot 这样两个键必须匹配的数组求和?

    我尝试对 Datum 和 Material 必须匹配的所有 Menge 和 Fehler 值求和 结果应类似于 Excel 数据透视表 到目前为止 这是我的代码 但我不知道如何添加也必须匹配的第二个键 Material 我希望你能理解我试图
  • MUI v5:系统属性样式与 sx prop 之间是否存在性能差异?

    The 从 v4 迁移到 v5 https mui com guides migration v4 box指南指出 The Box系统 props 在 v5 中有一个可选的替代 API 使用sx支柱 你可以阅读本节 https mui co
  • 如何使用 JavaScript 压缩文件?

    有没有办法使用 JavaScript 来压缩文件 例如 在雅虎邮件中 当您选择下载电子邮件中的所有附件时 它会被压缩并下载到单个 zip 文件中 JavaScript 能够做到这一点吗 如果是这样 请提供一个编码示例 我发现这个图书馆叫js
  • 如何将数据从 JavaScript 发送到 Python

    我正在 jinja2 和 python2 7 上使用 GAE 进行 Web 开发 我可以从Python获取数据 但我无法将数据从 JavaScript 发送到 Python 这是 JavaScript 代码 function toSave
  • es6-module 默认导出导入为未定义

    我不确定我在这里缺少什么 我正在使用 jspm 和 es6 module loader 开发一个项目 我有一个模块定义如下 import hooks from hooks import api from api import tools f
  • 如何在没有 jQuery 或延迟加载的情况下推迟背景图像

    根据帕特里克 塞克斯顿tutorial https varvy com pagespeed defer images html 我想以与这里相同的方式推迟背景图像img img src data image png base64 R0lGO
  • 如何将类组件中的 props 发送到功能组件?

    我是 ReactJS 的初学者 需要知道如何将一个页面中的 props 值发送到另一个页面 道具位于第一页上我可以获取类组件值如何获取另一页中的值 提前致谢 墙色 jsx import React Component from react
  • 检查是否安装了 Google Analytics 或 Universal Analytics?

    我正在尝试通过 JavaScript 来确定是否加载了 Google Analytics 或 Universal Analytics 一些客户仍在使用旧的 Google Analytics 我们希望推出一个收集数据的 JavaScript
  • 跟踪预防阻止了对 https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js 存储的访问

    大约一年半前 我使用 OfficeJS API 编写了一个 Excel 加载项 它一直工作到大约两周前 Excel 似乎已经进行了更新 现在我可以右键单击任务窗格并查看开发工具 而以前我无法做到这一点 并且必须运行外部 MS Edge 开发
  • JS - 如何将图像对象变成灰度并显示它

    基本上 当单击按钮时 它会告诉移动设备转到相机 一旦相机拍照 它就会给我图像数据 它被称为数据 URL 吗 这是我处理它的代码 var imagesrc data image jpeg base64 imageData var myimag
  • 数组长度未定义[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我试图按如
  • 如何在控制台中隐藏日志消息的来源?

    当将消息输出到控制台时 还会显示源代码 在 Chrome 开发者工具中 它位于右侧 console log Foo Source Foo test js 1 Output 但是 在某些网站上 会显示消息without正在显示的源 例如Fac
  • 如何使用node.js获取屏幕分辨率

    我需要使用 node js 获取屏幕分辨率 但以下代码不起作用 var w screen width var h screen height 这也行不通 var w window screen width var h window scre
  • 如何将函数导入到Vue组件中?

    我正在尝试将单个函数导入到我的 Vue 组件中 我为我的函数创建了一个单独的 js 文件 randomId js exports randomId gt My function 在我的 Vue 组件中 我导入了 Random js let
  • 了解客户端文件的对象 URL 以及如何释放内存

    我在用createObjectURL获取本地图像文件的引用 URL 当我完成文件 图像后 我打电话revokeObjectURL释放该内存 一切对我来说都很好 但我只是想确保我释放了我能释放的所有内存 我检查后出现了我的担忧chrome b
  • 如何向 SvelteKit/Vite 应用添加版本号?

    我正在尝试在我的 SvelteKit 应用程序中创建一个系统 它会在某个页面上向您显示有关当前应用程序版本的信息 最好是 Git 提交哈希和描述 我尝试使用Vite的定义功能 https vitejs dev config define在构

随机推荐

  • 为多个页面编写一次 Twitter Bootstrap 导航栏

    我正在尝试开始使用 Twitter Bootstrap 3 我想让每个导航栏项目都转到新的 href 例如 我希望导航栏项目 关于 和 联系 链接到对应的about html and contact html pages 我发现的许多网站似
  • 输入时自动完成,使内容跳转

    我有一个输入 在 Chrome 中 当弹出自动完成菜单并且您将鼠标悬停在其中一个选项上时 输入下方的内容会跳转 就像自动完成选择由于某种原因添加垂直填充一样 我怎样才能阻止这个 这很烦人 这是一个例子 小提琴演示 https jsfiddl
  • 如何使用扩展功能保存分层图像

    我正在使用扩展函数将 uiview 保存为 uiimage 该代码用于保存 uiimage 然而 我想做的是在保存到照片库的图像上保存透明图像 所以我尝试使用扩展函数保存分层图像 现在只有 uiivew 被保存 第二层没有被保存 class
  • Web API 返回 csv 文件

    我需要从 Web API 控制器获取 csv 文件 我无法显示 另存为 对话框 页面上仅显示文本输出 我尝试了两者 从 jquery 调用 Export 以及普通的旧 html 控制器 System Web Http HttpGet pub
  • 溢出-y:滚动在 Firefox 中不起作用

    请参考网址 http jsfiddle net 8tFnG 1 http jsfiddle net 8tFnG 1 table border 1 cellspacing 0 cellpadding 1 width 100 table
  • 获取任何给定字符的宽度(以像素为单位)

    我有一个非常棒的想法 但无法找出 NET Framework 中是否有任何类 任何版本 最好是 3 5 或 4 0 允许您传入字符 并获取该字符的宽度 以像素为单位 无论使用哪种字体 字体大小或字体装饰 有人可以指出我正确的方向吗 像这样的
  • 使用JS显示计算结果的HTML输出

    我正在尝试使用 HTML 和 JS 构建一个卡路里计算器 目前正在努力在屏幕上 或通过 console log 显示输出 我知道我正在做一些非常基本的错误 但目前无法确定那是什么 下面是我的 HTML 和 JS 代码 document ge
  • 连接表的最佳 SQL 索引

    考虑到性能改进 我想知道哪些索引对连接表 特别是在 Rails 3 has and belongs to many 上下文中使用 是否有帮助以及哪些索引有帮助 模型和表格设置 我的模型是Foo and Bar根据 Rails 约定 我有一个
  • 未修改的 iOS7 Apple GLPaint 示例混合问题

    在苹果的GLPaint https developer apple com library ios samplecode GLPaint Introduction Intro html例如 用户可以使用半透明画笔在表面上绘图并改变颜色 然而
  • 我可以在 VSCode IDE 上设置要使用的打字稿配置“tsconfig.json”路径吗?

    我有一个如下的项目结构 my app configs tsconfig json webpack merge ts webpack dev config ts webpack prod config ts node modules src
  • 在休眠启动时删除所有表

    出于开发目的 如何配置 hibernate 在运行之前删除所有表 我不想在运行代码之前不断手动删除所有表 我已经在使用了
  • Angular ng 消息在 ng 重复表单上显示错误

    我想用 ng Repeat 生成输入 问题是当我遇到错误时 这仅适用于最后一个元素 我怎样才能使其适用于每个元素
  • 如何从 ASP.NET MVC 中的控制器构造函数查找文件夹的路径?

    我试图获取网站根目录中文件夹的路径 并在调用控制器构造函数时将其保存到类属性中 public TestController Controller string temp public TestController temp 我已经尝试过以下
  • SQL 实现层次关系

    我有一个表 其中产品根据层次关系 如树结构 进行分类 我必须选择一个类别以及任何级别的所有子类别 见下图 例如我想要一个sql语句 当我查询传递id 11时 它返回我 19 20 21 22 23 24 25 26 在 MySQL 中存储分
  • 获取 JPA 本机插入查询生成的标识符

    出于性能原因 我需要使用一些本机查询将新对象插入数据库 我有一个非常复杂的 JPA 持久层 它管理我通常的实体读写 我想使用这个持久层来运行本机查询 我知道我需要方法 EntityManager createNativeQuery Stri
  • 向 Shiny 应用程序添加多个反应图和表格

    我正在开发一个闪亮的应用程序 在我工作的过程中 我一直在以随意的方式添加数字和表格 我希望有一个更好的框架 以便随着它的进一步发展 我可以灵活地将反应性图形和表格添加到输出中 目前 我一直在使用 tabPanel 和 Fluidrow 添加
  • 使用 Log4Net 格式化日期时间

    我想在使用 Log4Net 编写的日志文件中显示时间戳 HH mm ss 我希望该值采用中部时间 但我不希望出现偏移量 理想情况下 我希望它能够阅读
  • HMVC 和动态小部件

    背景 我使用 小部件 一词作为具有自己的控制器 因此有自己的操作 的部分视图 并且它几乎放置在所有页面中 我通过 HMVC 实现了它的渲染 这非常棒 Problem 现在的问题是小部件本身执行操作 考虑一下购物车小部件 该小部件被放置在所有
  • jQuery 1.6 中可能存在的错误 - $(...).attr("checked") 不起作用

    我的表单上有两个单选按钮 直到我开始使用 jQuery 1 6 为止 以下代码工作正常
  • React:第一次点击时状态未更新

    我正在制作购物车样本 每次单击时 我都会将项目的对象添加到购物车数组中 当我第一次单击 添加购物车 按钮时 它不会更新购物车 但第二次会更新 不过 当我单击渲染器返回语句中的 viewCart 按钮时 它会显示购物车中的准确商品数量 请参阅