为什么 map() returns 所有元素的值
Why map() returns the value for all elements
有一个对象数组 {id, value, active(true/false)}。当我点击一个元素时,我将 active 属性 设置为 true 并将此对象添加到状态中的另一个数组。当两个元素出现在另一个数组中时,然后我在 useEffect 中检查,如果这些元素的值相等,那么我什么都不做,只是清除数组。如果值不相等,那么我想将第一个数组中这些元素的 active 属性 更改为 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
为 truthy,则此 item.id === currentItems[0].id || currentItems[1].id
将始终计算为 true
。
我想你可能想要 item.id === currentItems[0].id || item.id === currentItems[1].id
这样的东西。
有一个对象数组 {id, value, active(true/false)}。当我点击一个元素时,我将 active 属性 设置为 true 并将此对象添加到状态中的另一个数组。当两个元素出现在另一个数组中时,然后我在 useEffect 中检查,如果这些元素的值相等,那么我什么都不做,只是清除数组。如果值不相等,那么我想将第一个数组中这些元素的 active 属性 更改为 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
为 truthy,则此 item.id === currentItems[0].id || currentItems[1].id
将始终计算为 true
。
我想你可能想要 item.id === currentItems[0].id || item.id === currentItems[1].id
这样的东西。