如何在复选框更改事件上填充布尔值数组?

Posted

技术标签:

【中文标题】如何在复选框更改事件上填充布尔值数组?【英文标题】:How to fill array of boolean values on checkbox change event? 【发布时间】:2022-01-07 00:14:21 【问题描述】:

我想做的是用布尔值填充答案数组。我的复选框是动态填充的,但只有四个。如果未选中复选框,则其值应为 false,如果选中,则应为 true。值应对应于数组索引,我的意思是,如果第一个复选框被切换,则只有答案 [0] 应该更改,如果第二个复选框被更改,则答案 [1 ] 等等..

沙盒https://codesandbox.io/s/elated-thompson-7rthy?file=/src/App.js

如果您也可以帮助我设置选中的值,我将不胜感激。

最后,我将此值设置为上下文存储,以便最终发送到服务器。

const Quiz1 = (props) => 
      const [answers, setAnswers] = useState([false, false, false, false]);

  const handleChange = (e) => 
     setAnswers([...answers, e.target.checked]);
     setQuizState( id: 0, question_id: question.question_id, answer: [answers] );
  ;
    return (
    question?.options?.map((option, i) =>  
       <Checkbox
         id=i
         name=option
         checked=WHAT TO PUT HERE?
         onChange=(e) => handleChange(e)
      />
 )

【问题讨论】:

你能在codesandbox分享你的代码示例吗? 给你codesandbox.io/s/elated-thompson-7rthy?file=/src/App.js 【参考方案1】:

您可以制作状态的浅表副本并更改其值。这是您想要的东西的简单示例:

import  useEffect, useState  from "react";

const Quiz1 = (props) => 
  const question = 
    options: ["1", "2", "3", "4"]
  ;

  const [answers, setAnswers] = useState([false, false, false, false]);

  useEffect(() => 
    console.log(answers);
  , [answers]);

  const handleChange = (e, i) => 
    let copy = [...answers];
    let current = copy[i];
    current = e.target.checked;
    copy[i] = current;
    setAnswers(copy);
  ;
  return question?.options?.map((option, i) => 
    return (
      <>
        <label>option</label>
        <input
          aria-label=option
          id=i
          name=option
          checked=answers[i]
          type="checkbox"
          onChange=(e) => handleChange(e, i)
        />
      </>
    );
  );
;
export default function App() 
  return <Quiz1 />;

【讨论】:

【参考方案2】:

如果我理解正确,你可以直接使用你的地图函数的索引来使用正确的答案索引。

checked=answer[i]

设置setAnswers([...answers, e.target.checked]) 会将新的新事件值附加到您的答案数组中。相反,您应该覆盖答案值。

answer[i] = e.target.value

【讨论】:

您对第一部分是正确的,我认为检查值可以这样确定。但是将目标值分配给 answer[i] 是行不通的,因为我猜它是一个 React 状态。 你绝对可以这样做。因为它是一个数组(引用类型),你可以像这样更新值。虽然它不会使用 useState() 更新,那么你应该添加 useEffect(() ,How to Answer) 。浅拷贝实际上和我做的解决方案一样

以上是关于如何在复选框更改事件上填充布尔值数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mongoose 中更改文档子数组的对象内的布尔值?

如何阅读帖子上的复选框值?

如何在 android 复选框检查更改上接收事件?

flex 3 数据网格:如果 == 0 则隐藏值并在布尔值上显示复选框

C#如何 将一个布尔型数组全部 填充为false

如何更改数组中的布尔值?