为什么 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].idtruthy,则此 item.id === currentItems[0].id || currentItems[1].id 将始终计算为 true

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