reactjs - React Multiple Checkboxes 在更改后不可见
问题描述
我有一个复选框列表。即使在value
更改后,复选框也不会显示为选中状态。
以下是我的代码: -
import React, { useState } from "react";
import { render } from "react-dom";
const CheckboxComponent = () => {
const [checkedList, setCheckedList] = useState([
{ id: 1, label: "First", isCheck: false },
{ id: 2, label: "Second", isCheck: true }
]);
const handleCheck = (e, index) => {
checkedList[index]["isCheck"] = e.target.checked;
setCheckedList(checkedList);
console.log(checkedList);
};
return (
<div className="container">
{checkedList.map((c, index) => (
<div>
<input
id={c.id}
type="checkbox"
checked={c.isCheck}
onChange={e => handleCheck(e, index)}
/>
<label htmlFor={c.id}>{c.label}</label>
</div>
))}
</div>
);
};
render(<CheckboxComponent />, document.getElementById("root"));
我在循环外的一个简单复选框上工作得很好。我不确定问题出在哪里。
这是链接 - https://codesandbox.io/s/react-multiple-checkboxes-sczhy?file=/src/index.js:0-848
解决方案
改为这样做:
const handleCheck = (e, index) => {
setCheckedList(prevState => {
const nextState = prevState.slice()
nextState[index]["isCheck"] = e.target.checked;
return nextState
});
};
由于checkedList
是一个数组,(被视为对象并按此类处理),更改属性不会更改数组本身。所以 React 可以知道发生了什么变化。
推荐阅读
- python - Python 如何发出 HTTP GET 请求
- gradle - 如何在 gradle.build 中添加模块依赖项
- jquery - 如何以可读的方式查看 Jquery 文件?
- haskell - 根据元素过滤 3(或更多)元组列表
- ios - 异常“NSRangeException”,原因:“*** -[__NSArray0 objectAtIndex:]:索引 0 超出了空 NSArray 的范围”
- java - 如何使用可运行接口在多线程环境中创建 webdriver
- r - 使用 jsonlite 导入 json 会导致错误
- android - 如何将操作栏颜色着色为白色
- apache - 谷歌浏览器 - 不打开链接 ERR_CERT_COMMON_NAME_INVALID
- c - LLVM Pass 插入对 LLVM 位码的外部函数调用