Reactjs 更改某些特定的值以反映状态
和Reactjs 更改某些特定的值以反映状态,reactjs,react-hooks,Reactjs,React Hooks,和checkboxHealthLabels文件: const [checkedHealth, setCheckedHealth] = useState(checkboxHealthLabels); const handleChangeHealth = (event) => { setCheckedHealth([ ...checkedHealth, [event.target.name]: event.target.checked, ]); }; 现在我只想更改一个对象,例如
checkboxHealthLabels
文件:
const [checkedHealth, setCheckedHealth] = useState(checkboxHealthLabels);
const handleChangeHealth = (event) => {
setCheckedHealth([
...checkedHealth,
[event.target.name]: event.target.checked,
]);
};
现在我只想更改一个对象,例如:{name:“无酒精”,选中:false},
其他值必须保持不变。如何执行此操作?在数组中找到同名对象的索引,然后根据需要进行切换:
export const checkboxHealthLabels = [
{ name: "Alcohol-Free", checked: false },
{ name: "Celery-Free", checked: false },
{ name: "Dairy-Free", checked: false },
];
您也可以考虑将该状态作为一个对象(名称是对象属性)而不是数组,它可能更容易。代码>1:对象{name:“无酒精”,选中:true} 2:对象{name:“无酒精”,选中:false} 3:对象{name:“无芹菜”,选中:false}代码>哇,我输入了
。查找而不是。查找索引
非常感谢。现在开始工作了。但ı有一个新问题:“(关于您现在删除的注释)是的,这正是我所考虑的对象结构。唯一的问题是,您需要等待组件重新呈现才能看到更新的状态。请参阅
const handleChangeHealth = ({ target }) => {
const { name } = target;
const index = checkedHealth.findIndex(obj => obj.name === name);
setCheckedHealth([
...checkedHealth.slice(0, index),
{ name, checked: target.checked },
...checkedHealth.slice(index + 1)
]);
};