在引用数组中查找单击的元素 (useRef)

2023-12-30

如果我有一个引用值数组,我如何找到单击的项目,我使用了 useRef

import { useRef, useState, useEffect } from 'react';

function App() {
  const checkboxes = useRef({});
  var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
  var myArrValues = []
  const [arrValues, setArrValues] = useState(false)

  for (let i = 0; i < arr.length; i++)
    myArrValues.push(i % 2 === 0)

  useEffect(() => {
    setArrValues(myArrValues)
  }, [])

  const setcheckBoxValue = (e) => {
    console.log(checkboxes);
  }

  return (
    <div className="App">
      {arr.map( (x, idx) =>
        <input 
          type="checkbox" 
          id={idx.toString()} 
          name={idx.toString()} 
          checked={arrValues[idx]}
          ref={ (el) => checkboxes.current[idx] = el } 
          onChange={(e) => setcheckBoxValue(e)}
        ></input>)
      }
    </div>
  );
}

export default App;

在 setcheckBoxValue 方法中,我需要知道单击了哪个复选框 提前致谢

Rafael


我不认为裁判(或arr未使用的字符)在这里做任何有用的事情。如果您想切换给定复选框的状态,只需跟踪渲染闭包中迭代的索引,并在单击时将其传递:

const { useRef, useState, useEffect } = React;

function App() {
  const [arrValues, setArrValues] = useState(
    // use a function here to only create the initial array on mount
    () => Array.from(
      { length: 10 },
      (_, i) => i % 2 === 0
    )
  );

  const setcheckBoxValue = (i) => {
    setArrValues(
      arrValues.map((v, j) => j !== i ? v : !v)
    );
  }

  return (
    <div className="App">
      {arrValues.map( (val, i) =>
        <input 
          key={i}
          type="checkbox" 
          checked={val}
          onChange={() => setcheckBoxValue(i)}
        ></input>)
      }
    </div>
  );
}

ReactDOM.render(<App />, document.querySelector('.react'));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div class='react'></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在引用数组中查找单击的元素 (useRef) 的相关文章

随机推荐

  • 正则表达式 - 如何查找单词和引用的短语

    我想说以下一串 Guiness Harp Holy Moses 这样在 C 或 VB 中就可以得到一个匹配集 Guiness Harp Holy Moses 本质上 它会在空格上分开 除非空格周围有引号 否则引号之间的那些单词将被视为单个短
  • 如何使用 JavaScript 从文本框控件中获取选定的文本

    我有一个文本框和一个链接按钮 当我编写一些文本 选择其中一些文本 然后单击链接按钮时 从文本框中选择的文本必须显示在消息框中 我该怎么做 当我单击下面文本框的提交按钮时 消息框必须显示洛雷姆 伊普苏姆 因为在区域中选择了 Lorem ips
  • PySpark:when 子句中的多个条件

    我想修改数据框列 年龄 的单元格值 其中当前为空白 并且只有当另一列 幸存 的相应行的值为 0 年龄为空白 时 我才会执行此操作 如果 Survived 列中为 1 但 Age 列中为空 那么我会将其保留为空 我尝试使用 运算符但它不起作用
  • 如何使用 pyPdf 反转 pdf 文件中的页面顺序?

    我有一个 pdf 文件 myFile pdf 我想使用反转其页面的顺序pyPdf http pybrary net pyPdf How from pyPdf import PdfFileWriter PdfFileReader output
  • Doctrine ORM:使用接口作为不同实体的关系?

    学说中多对多关系中如何使用接口 在我的应用程序中有 3 个实体 用户 汽车和司机 用户可以将汽车和司机添加为收藏夹 所以我做了这个结构 简化 用户 最喜欢的功能 namespace Acme AppBundle Entities use A
  • Jsoup.connect() 适用于 Java,不适用于 Android

    我已经尝试过Jsoup connect Jsoup 网站上给出的示例 它在 Java 中运行良好 由于某种原因 即使我在我的项目中允许互联网访问权限 我也无法使其在 Android 项目 Eclipse 中工作AndroidManifest
  • 将命令行参数从 WiX 包传递到 MSI

    我使用的是 Wix 3 7 我有一个 MSI 我想设置一个注册表项 可能通过自定义操作 因为他必须检查该注册表项是否已存在 据我所知 引导程序项目中的捆绑包无法更改计算机状态 例如设置注册表 因此 我尝试通过传递命令行参数
  • 永久修改不属于我的网站的 CSS,并将更改分发到我的网络

    最简单的方法是什么 我很难理解 而且现在没有足够的时间来正确地花和研究 Greasemonkey 只对任何网站应用永久的 css 更改 我认为这更简单 只需添加一个保留在浏览器中的 CSS 即可 但我没有找到任何简单 快速的工具自定义来仅添
  • WPF不同的窗口图标和任务栏图标

    WPF 中的窗口和任务栏是否可以有不同的图标 在我的特殊场景中 我希望窗口有一个透明的图标 任务栏有一个 Metro 样式 带有彩色背景 设置不同的应用程序图标不起作用 任务栏始终显示窗口图标 有人可以提供解决方案吗 由于窗口图标始终为 1
  • File.listFiles 在不应该返回 null 时返回 null

    我正在尝试使用以下命令获取 Phone Pictures 文件夹 内部存储 未插入 SDCard 中现有的文件列表 File file Environment getExternalStoragePublicDirectory Enviro
  • Java EE 5 和 6 工件的正确组和工件 ID 是什么?

    到目前为止 我们一直在手动下载 jar 并使用自定义组 工件 ID 部署到我们的 Maven 存储库 我想避免这种情况 所以我的问题是 什么是正确的组和 Java EE 5 和 6 的工件 ID 文物 我想获取 JSR 级别的名称 例如 我
  • Android @NonNull 的用处

    经过一些阅读和提问后像这个 https stackoverflow com questions 32652402 right way to use the nonnull annotation in android studio我想知道使用
  • 弹簧注入 - 线程安全

    public class Test private First first private Second second public void setFirst First first this first first public Fir
  • 架构师迫切希望使用 SOAP over JMS

    我过去曾使用 JMS 来构建应用程序 效果很好 现在 我与愿意使用规范 基于 Java 消息服务 1 0 的 SOAP 的架构师合作 这个规格接缝过于复杂 我没有看到太多的实现 除了推动规范的供应商之外 这里有人在生产环境中使用这个规范吗
  • 将 Google Cloud SQL 备份上传到 Bigquery

    我在尝试将 Google Cloud SQL 数据库迁移到 BigQuery 时遇到了麻烦 我已将数据库备份从 Cloud SQL 导出到 Cloud Storage 但在尝试将其导入 BigQuery 时 出现错误 未找到 GS 的 UR
  • FTP 上传错误“553 无法创建文件”

    import org apache commons net ftp FTPClient import org apache commons net ftp FTPReply import org apache commons net ftp
  • CI/CD 管道中的 Flutter 命令出现问题

    您好 最近我将我的 Mac mini 从 Mojave 升级到 Catalina 10 15 4 以使用新的 Xcode 在更新之前 我的 CI CD 管道工作得很好 我的 CI CD 管道基于 Azure 我使用我的机器作为构建机器 更新
  • 函数尝试块。一个有趣的例子

    考虑以下 C 程序 struct str int mem str try mem 0 throw 0 catch int main str inst catch 块起作用 即控件到达它 然后程序崩溃 我不明白这有什么问题 一旦控制到达构造函
  • 如何在不使用主题的情况下自定义 Material-UI 下划线的样式?

    我在轮廓自定义样式方面取得了成功variant outlined 我用notchedOutline in InputProps 否则 variant anything else 仅存在底部边框的地方 即使使用 它也不起作用underline
  • 在引用数组中查找单击的元素 (useRef)

    如果我有一个引用值数组 我如何找到单击的项目 我使用了 useRef import useRef useState useEffect from react function App const checkboxes useRef var