确定在反应中选中的复选框的方法(useState)

Dan*_*Dan 5 javascript reactjs react-hooks

这是我第一次开发 React 应用程序。我试图在表格的每一行中实现复选框并检查哪些行被选中。

我使用useState钩子来进行检查和 onChange 事件,但是当我检查然后取消选中复选框时,这些值似乎没有刷新。

我想问一下如何添加一个逻辑来删除钩子上未勾选的值。

T1 复选框 A- 选中复选框 B- 选中 CheckedMap- A,B

T2 Checkbox B- Unchecked CheckedMap- A,B // 未勾选的Checkbox B也存储在CheckedMap中

感谢您的帮助。

export default function({ infinite }) {
  const [checkedMap, setCheckedMap] = useState(new Map());
}

const handleCheckedChange = transaction_seq => {
    let modifiedMap = checkedMap;
    modifiedMap.set(transaction_seq, !checkedMap.get(transaction_seq));
    setCheckedMap(modifiedMap);
  };

const columns = [
    {
      Header: "Transaction(s)",
      className: "left",
      columns: [
        {
          id: "checkbox",
          accessor: "checkbox",
          Cell: ({ row }) => {
            return (
              <input
                type="checkbox"
                className="checkbox"
                checked={checkedMap.get(row.original.transaction_seq)}
                onChange={() =>
                  handleCheckedChange(row.original.transaction_seq)
                }
Run Code Online (Sandbox Code Playgroud)

gaz*_*rgo 12

这是如何使用带有反应useState钩子的受控复选框的方式。

const { useState } = React; // --> for inline use
// import React, { useState } from 'react';  // --> for real project


const App = () => {
  const [checked, setChecked] = useState(false)
  const handleClick = () => setChecked(!checked)
  
  return <input onClick={handleClick} checked={checked} type="checkbox" />
};


ReactDOM.render(<App />, document.getElementById('root'))
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.9.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.9.0/umd/react-dom.production.min.js"></script>
<div id="root"></div>
Run Code Online (Sandbox Code Playgroud)

  • 请查看动态复选框数据的答案:/sf/ask/4411438181/#63021381 (2认同)

Shu*_*tri 0

您可以在地图中查看检查状态,然后决定是否设置该值或删除该值

const handleCheckedChange = transaction_seq => {
    let modifiedMap = checkedMap;
    if(checkedMap.get(transaction_seq)) {
        modifiedMap.delete(transaction_seq)
    } else {
        modifiedMap.set(transaction_seq, true);
    }
    setCheckedMap(modifiedMap);
  };
Run Code Online (Sandbox Code Playgroud)