【发布时间】:2020-12-13 14:31:48
【问题描述】:
我正在尝试在反应中实现复选框,但在选中和取消选中复选框时遇到问题。
我尝试实现onchange处理程序。
onChange={() => {
// first approch
// i.checked = !i.checked;
// setObj({ ...i});
// second approach
setObj({ ...i, checked: !i.checked });
setTimeout(ab, 2000);
}}
所以我用了两种方法
在第一种方法中,我更改了toggle the checked 属性,然后创建了新的reference 工作正常
i.checked = !i.checked;
setObj({ ...i});
在第二种方法中,我使用toggle of checked property 创建了一个新对象或引用但这不起作用,原因
{ ...i, checked: !i.checked }
为什么我的第一种和第二种方法不同?
这是我的代码
https://codesandbox.io/s/lucid-fire-cxp9c?file=/src/child.js:362-666
import React from "react";
export default function Child({ data, ab }) {
const [obj, setObj] = React.useState(null);
return (
<>
{data &&
data.map((i, idx) => {
return (
<ul key={idx}>
<li>
<input
type="checkbox"
checked={i.checked}
onChange={() => {
// first approch
// i.checked = !i.checked;
// setObj({ ...i});
// second approach
setObj({ ...i, checked: !i.checked });
setTimeout(ab, 2000);
}}
/>
{i.label}
</li>
{i.childrens && i.childrens.length > 0 ? (
<Child data={i.childrens} ab={ab} />
) : null}
</ul>
);
})}
</>
);
}
有什么建议...!!?
【问题讨论】:
标签: javascript reactjs redux react-redux