改变React js中的复选框状态

问题描述 投票:0回答:1

这是我的反应复选框代码。它来自 Material-UI

  const [checkmark, setCheckMark] = useState(false);

  const [selectedRows, setSelectedRows] = useState([]);

  const toggleAllCheck = (event) => {
    console.log("before", checkmark);
    setCheckMark(!checkmark);
    console.log("after", checkmark);
    let newSelectedRows;
    if (checkmark) {
      newSelectedRows = salesRows.map((row) => row.id);
      setSelectedRows(newSelectedRows);
      console.log("selected rows", newSelectedRows);
    }
  };

由于复选标记状态最初设置为 false,因此复选框中没有复选标记。

单击该组件后,它会显示一个复选标记。切换是因为toggleAllCheck函数。

在函数内部,首先控制台将复选标记的值记录为 false,这是可以理解的。在第二行,它将值更改为 true。这反过来又在我的复选框中打勾。

然后在第三行,我再次控制台记录复选标记的值。但它给出了错误的读数。

所以,我感到困惑的是为什么它仍然是错误的。我的想法是,状态更新发生在下一个渲染中(在其他领域也困扰着我),但是我如何在不重新渲染的情况下检查我的复选框。

此外,相同的复选标记值可以让我选中该框,尽管其控制台日志显示 false,但无法执行 if 语句。

当复选框上有勾号时,我试图保留 selectedRows,但只有当勾号被删除时,我才在第二次单击时才得到。

reactjs checkbox material-ui
1个回答
0
投票

这个案例在 React 的文档中: 我已经更新了状态,但是日志记录给了我旧值

保留对您正在设置的新状态的引用,因为

setX
必然无法更新变量:

  const [checkmark, setCheckMark] = useState(false);
  const [selectedRows, setSelectedRows] = useState([]);

  const toggleAllCheck = (event) => {
    const nextCheckmark = !checkmark;
    setCheckMark(nextCheckmark);
    let newSelectedRows;
    if (nextCheckmark) {
      newSelectedRows = salesRows.map((row) => row.id);
      setSelectedRows(newSelectedRows);
      console.log("selected rows", newSelectedRows);
    }
  };

© www.soinside.com 2019 - 2024. All rights reserved.