为什么map()返回所有元素的值



有一个对象数组{id, value, active(true/false)}。当我单击一个元素时,我将active属性设置为true,并将该对象添加到另一个处于状态的数组中。当两个元素出现在另一个数组中时,我在useEffect中执行检查,如果这两个元素的值相等,那么我什么都不做,只是清除数组。如果值不相等,那么我想将第一个数组中这些元素的active属性更改为false。但是由于某种原因,false会改变所有元素,尽管有一个条件。

const [memoryGameItems, setMemoryGameItems] = useState(data)
const [currentItems, setCurrentItems] = useState([])
const choosingItem = (id, value) => {
setMemoryGameItems(memoryGameItems.map(item => {
if (id === item.id) {
return { ...item, active: true }
}
return item
}))
setCurrentItems([...currentItems, { id, value }])
}
useEffect(() => {
if (currentItems.length === 2) {
if (currentItems[0].value === currentItems[1].value) {
setCurrentItems([])
} else {
setTimeout(() => {
setMemoryGameItems(memoryGameItems.map(item => {
if (item.id === currentItems[0].id || currentItems[1].id) {
return { ...item, active: false }
}
return item
}))
setCurrentItems([])
}, 500)
}
}
// eslint-disable-next-line
}, [currentItems])

如果currentItems[1].id为真,则item.id === currentItems[0].id || currentItems[1].id总是求值为true

我想你可能想要像item.id === currentItems[0].id || item.id === currentItems[1].id这样的东西。

最新更新