如何使用对象数组中的 usestate 更新状态?

2024-02-18

我在使用 React useState 挂钩时遇到了一些问题。我有一个带有复选框按钮的待办事项列表,我想将“完成”属性更新为“true”,该属性与“单击”复选框按钮的 id 具有相同的 id。如果我 console.log 我的 'toggleDone' 函数,它会返回正确的 id。但我不知道如何更新正确的属性。

目前状态:

const App = () => {

  const [state, setState] = useState({
    todos: 
    [
        {
          id: 1,
          title: 'take out trash',
          done: false
        },
        {
          id: 2,
          title: 'wife to dinner',
          done: false
        },
        {
          id: 3,
          title: 'make react app',
          done: false
        },
    ]
  })

  const toggleDone = (id) => {
    console.log(id);
}

  return (
    <div className="App">
        <Todos todos={state.todos} toggleDone={toggleDone}/>
    </div>
  );
}

我想要的更新状态:

const App = () => {

  const [state, setState] = useState({
    todos: 
    [
        {
          id: 1,
          title: 'take out trash',
          done: false
        },
        {
          id: 2,
          title: 'wife to dinner',
          done: false
        },
        {
          id: 3,
          title: 'make react app',
          done: true // if I checked this checkbox.
        },
    ]
  })

您可以安全地使用 JavaScript 的数组映射功能,因为它不会修改现有状态,而 React 不喜欢这种情况,并且它会返回一个新数组。该过程是循环遍历状态数组并找到正确的 id。更新done布尔值。然后使用更新后的列表设置状态。

const toggleDone = (id) => {
  console.log(id);

  // loop over the todos list and find the provided id.
  let updatedList = state.todos.map(item => 
    {
      if (item.id == id){
        return {...item, done: !item.done}; //gets everything that was already in item, and updates "done"
      }
      return item; // else return unmodified item 
    });

  setState({todos: updatedList}); // set state to new object with updated list
}

编辑:更新了代码以切换item.done而不是将其设置为 true。

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

如何使用对象数组中的 usestate 更新状态? 的相关文章

  • jQuery UI sortable 和 contenteditable=true 不能一起工作

    我正在创建一个列表并希望使其项目可排序和可编辑 所以我这样做 ul li span A span li li span B span li li span C span li ul ul list sortable http jsfiddl
  • ngx-DataTable 对列进行排序无法正常工作 Angular 4

    虽然我对角度非常陌生 但我在使用 ngx DataTable 时遇到了一些困难 我使用简单的 ngx DataTable 进行简单的操作 问题出在列上 尽管我已将 attr 声明为 sortable true 但排序不起作用 这是代码 表定
  • javascript 和 PHP 中的正则表达式有什么区别吗?

    这是在 javascript 中验证电子邮件地址的正则表达式 我不确定是否可以直接在 PHP 中使用它 a z d u00A0 uD7FF uF900 uFDCF uFDF0 uFFEF a z d u00A0 uD7FF uF900 uF
  • Nodemailer:从未收到问候语

    当尝试使用 Nodemailer 在 Node 内发送电子邮件时 https github com nodemailer nodemailer https github com nodemailer nodemailer 调用sendMai
  • 在 IE10 中禁用捏合放大

    在 IE10 触摸模式下 我希望仅使页面的特定部分可缩放 其余的不应该 我找到了这个 http msdn microsoft com en US library ie hh772044 aspx http msdn microsoft co
  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • 将 Google 电子表格解析为 Javascript 数组

    我有一个 Google 电子表格 https docs google com spreadsheets d e 2PACX 1vRc8Lx0N wf3f1xAAXkNFUqQjaWPFcde3YjK02gCBqGpUrULwHC6NC0sn
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才
  • 带时间戳的 Firestore 查询

    如果它是文本字段 我可以使用 where 条件获取数据 但是当我尝试对时间戳字段和日期执行相同操作时 事情不起作用 这是我的代码 home ts firebase firestore collection cities where time
  • HTML 和 JavaScript - 将滚动操作从一个元素传递到另一个元素

    假设我有两个 div div div div A scrollable list div 我想让它当光标停在里面时 control并且鼠标滚轮滚动 view将会滚动 无论如何要实现这一目标 好的 快速修复对我有用 即使固定 div 不可滚动
  • (0, eval) () 的作用是什么? [复制]

    这个问题在这里已经有答案了 以下内容来自这个问题 https stackoverflow com questions 14119988 return this 0 evalthis 14120023 14120023 function q
  • ReferenceError 和全局对象

    在浏览器中的 JavaScript 中window是全局对象 这意味着在全局范围内定义的每个变量都是window 那么为什么我会得到这个结果 console log window foo No error logs undefined co
  • 如何修复 getImageData() 错误画布已被跨源数据污染?

    我的代码在本地主机上运行得很好 但在网站上却不起作用 我从控制台收到此错误 对于这一行 getImageData x y 1 1 data Uncaught SecurityError Failed to execute getImageD
  • 如何在 JavaScript 中对关联数组进行排序?

    我需要为我的一个项目通过 JS 对关联数组进行排序 我发现这个函数在 Firefox 中运行得很好 但不幸的是它在 IE8 OPERA CHROME 中不起作用 无法找到使其在其他浏览器中运行的方法 或者找到另一个适合该目的的函数 我真的很
  • `ie9` - contenteditable false 在父级可编辑时不起作用

    我正在尝试制作内容可编辑和不可编辑的容器 用户可以通过 3 种方式使用它 他们可以将内容与non editable 他们可以将内容与editable 他们可以在不选择其中之一的情况下放置内容 可编辑 我正在努力实现以下目标 content
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 如何修复nodejs Express服务器中的“MulterError:意外字段”?

    我正在设置一个服务器来从客户端上传 zip 文件 服务器运行express和multer来执行此操作 上传文件时 服务器抛出 MulterError 意外字段 错误 我无法弄清楚是什么导致了它 我尝试过使用 png 图像 效果很好 但对于
  • 如何设置 Firebase 用户的显示名称?

    根据Firebase网站上的JS Auth文档 它只展示了如何获取 displayName 以及如何更新 displayName 所以我尝试更新它 但这有点不合逻辑 因为你怎么能在不创建某些东西的情况下更新它呢 所以我的问题是 如何设置注册
  • NodeJS:如何获取服务器的端口?

    您经常会看到 Node 的示例 hello world 代码 它创建一个 Http Server 开始侦听端口 然后执行以下操作 console log Server is listening on port 8000 但理想情况下你会想要
  • 使用 JQuery 预填充选择字段的下拉选项验证

    我有这个 JQuery 片段来防止选择已在另一个字段中选择的下拉选项 var coll select name service on change function coll each function var val this value

随机推荐

  • 使用 requestAnimationFrame 控制 fps?

    这好像是requestAnimationFrame是现在事实上的动画方式 它在大多数情况下对我来说效果很好 但现在我正在尝试做一些画布动画 我想知道 有什么方法可以确保它以特定的 fps 运行吗 我知道 rAF 的目的是为了获得始终如一的平
  • 更改 MySQL Workbench 查询中的注释字体颜色

    是否可以将字体颜色从浅灰色更改为更鲜艳的颜色 GET TODAY S EVENTS ONLY lt this is the font I want to change where event date CURDATE 我目前在 Window
  • ASP.NET 捕获所有路由和转义正斜杠

    我使用 MVC 的包罗万象的路由来提供应用程序中资源的路径 它看起来像这样 routes MapRoute null Resource resourcePath new controller Resource action Open 动作是
  • Guzzle:处理 400 个错误请求

    我在 Laravel 4 中使用 Guzzle 从另一台服务器返回一些数据 但我无法处理错误 400 错误请求 status code 400 reason phrase Bad Request using client gt get ht
  • Github - 流量 - 奇怪的“Git 克隆”统计数据

    我有一个 Github 存储库 其中包含一些令人困惑的 Git 克隆统计信息 如下所示 该存储库没有大量访问者或 Stars 但在 9 月 29 日显示了相对较多的克隆 GitHub流量帮助页面 https help github com
  • 如何在 SVG / raphael 中的贝塞尔曲线末端绘制箭头?

    我有一条由此生成的曲线 var path M x1 toFixed 3 y1 toFixed 3 L arrow left x arrow left y L arrow right x arrow right y L x1 toFixed
  • Python 错误:io.UnsupportedOperation:fileno

    我正在使用服务器和客户端程序here http www bogotobogo com python python network programming tcp server client chat server chat client s
  • 等待 IO 的可重用测试代码

    我正在尝试在 WCF 公开的方法 服务上使用 async await 一切工作正常 但我想模拟实际等待 IO 的服务方法 以便服务调用将注册到 IO 完成端口 并将线程放回到线程池中 澄清一下 我只是尝试确认 IO 完成端口的使用情况 并更
  • 通过 Wi-Fi 扫描 MFI 产品

    在 iOS 8 中 Apple 允许我们通过 Wifi direct 连接到设备并与其共享 WiFi 网络凭据 我们可以在 wifi 设置页面中执行此操作 也可以在应用程序中执行此操作 我正在尝试启动扫描来查找 wifi MFI 设备 我可
  • 从 aws lambda 函数调用 django 函数视图

    我想在 AWS Lambda 上运行我的 django 视图 为此 我创建了一个 lambda 函数来调用该视图函数 AWS lambda 函数是这样的 gt import app views as v def functionA hand
  • 日语 COBOL 代码:G 文字和标识符的规则?

    我们正在处理IBMEnterprise日语COBOL源代码 准确描述 G 类型文字中允许的内容的规则 标识符的允许范围尚不清楚 IBM 手册指出 G 文字 引号内的第一个字符必须为 SHIFT OUT 以及 SHIFT IN 作为结束引号之
  • 如何在不使用任何第三方库的情况下在C++中反序列化json字符串[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在 vc 创建一个应用程序以 j
  • Jenkins 与 Jest 集成

    有没有办法将 Jenkins 集成到基于 Jasmine 构建的 Javascript Jest 测试框架中 我尝试将 Jest 与茉莉花记者 https github com larrymyers jasmine reporters 但未
  • R 中 LINQ 风格的数据操作

    我感兴趣 R 中是否有一个包支持调用链式数据操作 例如 C LINQ F 我想启用这样的样式 var list new 1 5 10 12 1 var newList list Where x gt x gt 5 GroupBy x gt
  • 在 for 循环内动态创建按钮以在滚动视图中使用

    我在动态创建按钮时遇到问题 我使用了提供的帮助如何在 Android 中动态创建按钮 https stackoverflow com questions 3011092 how can i dynamically create a butt
  • 每两个表行的第 n 个子级

    我需要将表格的每两行设为灰色 如果可能的话 我更愿意使用 nth child 我已经搞乱了Chris Coyier 的第 n 个孩子测试员 http css tricks com examples nth child tester 但仍然无
  • 在 Haskell 中快速更新大状态

    对于 Haskell 中的矢量图形库 我必须携带一个相当大的状态 线条描边参数 颜色 剪辑路径等 我知道有两种方法可以做到这一点 引用来自的评论哈斯克尔咖啡馆 http www mail archive com haskell cafe h
  • Angular 2 JSONP注入脚本没有调用回调错误

    我正在 localhost 3000 上使用 npm 服务器运行应用程序 服务文件 import Injectable from angular core import Jsonp from angular http import rxjs
  • 为什么在 Java 中要在单独的文件中声明枚举?

    为什么这个枚举在它自己的文件中声明 这样做有什么好处吗 另外我如何才能将其放入两个文件之一中 我真的不知道我在做什么 还请用简单的方式解释一下 因为这是教科书示例 而且我对 Java 还很陌生 刻度名称 java enum ScaleNam
  • 如何使用对象数组中的 usestate 更新状态?

    我在使用 React useState 挂钩时遇到了一些问题 我有一个带有复选框按钮的待办事项列表 我想将 完成 属性更新为 true 该属性与 单击 复选框按钮的 id 具有相同的 id 如果我 console log 我的 toggle