useState 传播语法
useState spread syntax
当我设置 setItemPressed({[itemid]: false, ...itemPressed}) 时,itemid 不会更改为 false,但是当我 setItemPressed({[itemid]: false}) itemid cahnges 为 false ,但所有其他 ID 都被删除。我如何才能让其他 ID 保留而这个 ID 发生变化?
const [itemPressed, setItemPressed] = useState({});
const changeColor = (itemid) => {
if(itemPressed.hasOwnProperty(itemid)){
setItemPressed({[itemid]: false, ...itemPressed})
}
else{
setItemPressed({...itemPressed, [itemid]: true});
}}
你能试着改变放置 ...itemPressed 和你的 属性
的顺序吗
const [itemPressed, setItemPressed] = useState({});
const changeColor = (itemid) => {
if(itemPressed.hasOwnProperty(itemid)){
setItemPressed({...itemPressed,[itemid]: false,})
}
else{
setItemPressed({...itemPressed, [itemid]: true});
}}
顺序很重要。
setItemPressed({[itemid]: false, ...itemPressed})
应该翻转:
setItemPressed({...itemPressed, [itemid]: false})
以后的优先于之前的。
编辑: 按键不起作用的原因是按键一直在对象中。将其设置为 false 不会删除它,因此 hasOwnProperty
在第一次按下后将始终 return true,并且将始终设置为 false。
以下是重写它以在未按下时删除键的方法:
const [itemPressed, setItemPressed] = useState({});
const changeColor = (itemid) => {
// Create a copy of the state
const newItemPressed = {...itemPressed};
if(newItemPressed.hasOwnProperty(itemid)){
// Delete the key from the object, this way you don't have unnecessary
// keys still in there.
delete newItemPressed[itemid];
}
else{
newItemPressed[itemid] = true;
}
setItemPressed(newItemPressed);
}
你可以像这样在使用状态中设置 false
const [itemPressed , setItemPressed] = useState(false);
然后像这样设置状态:
setItemPressed(!itemPressed);
当你按下时它会改变状态
当我设置 setItemPressed({[itemid]: false, ...itemPressed}) 时,itemid 不会更改为 false,但是当我 setItemPressed({[itemid]: false}) itemid cahnges 为 false ,但所有其他 ID 都被删除。我如何才能让其他 ID 保留而这个 ID 发生变化?
const [itemPressed, setItemPressed] = useState({});
const changeColor = (itemid) => {
if(itemPressed.hasOwnProperty(itemid)){
setItemPressed({[itemid]: false, ...itemPressed})
}
else{
setItemPressed({...itemPressed, [itemid]: true});
}}
你能试着改变放置 ...itemPressed 和你的 属性
的顺序吗const [itemPressed, setItemPressed] = useState({});
const changeColor = (itemid) => {
if(itemPressed.hasOwnProperty(itemid)){
setItemPressed({...itemPressed,[itemid]: false,})
}
else{
setItemPressed({...itemPressed, [itemid]: true});
}}
顺序很重要。
setItemPressed({[itemid]: false, ...itemPressed})
应该翻转:
setItemPressed({...itemPressed, [itemid]: false})
以后的优先于之前的。
编辑: 按键不起作用的原因是按键一直在对象中。将其设置为 false 不会删除它,因此 hasOwnProperty
在第一次按下后将始终 return true,并且将始终设置为 false。
以下是重写它以在未按下时删除键的方法:
const [itemPressed, setItemPressed] = useState({});
const changeColor = (itemid) => {
// Create a copy of the state
const newItemPressed = {...itemPressed};
if(newItemPressed.hasOwnProperty(itemid)){
// Delete the key from the object, this way you don't have unnecessary
// keys still in there.
delete newItemPressed[itemid];
}
else{
newItemPressed[itemid] = true;
}
setItemPressed(newItemPressed);
}
你可以像这样在使用状态中设置 false
const [itemPressed , setItemPressed] = useState(false);
然后像这样设置状态:
setItemPressed(!itemPressed);
当你按下时它会改变状态