色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

反應:css動畫

黃文隆2年前7瀏覽0評論

我希望每次新用戶前置,第一個div有css動畫,但我的代碼只對第一次前置工作,第二次前置動畫不觸發

const [userList, setUserList] = useState<any>([]);
<div className='user-listing absolute top-0 left-0'>
    {
        userList.map((user:any, index:number)=>{
        return (
            <div key={index} className='user'>{user}</div>
        )
        })
    }
</div>
<button onClick={()=> setUserList((list:any) => [randomUser(),...list])}>
  add
</button>

.user-listing{
  .user{
    &:first-child {
      animation-name: fadeIn;
      animation-duration: .15s;
    }
  }
}

@keyframes fadeIn {
  0% {
      opacity: 0;
      transform: scale(.2)
  }

  to {
      opacity: 1;
      transform: scale(1)
  }
}

現在的情況是,key prop在列表的第一個元素中保持不變,因此React將更新包含現有鍵的元素,并在列表的末尾用一個新的鍵創建一個新的元素。

首先,您有一個帶有0鍵的新元素,因此動畫將會播放。然后,在用戶列表中添加一個元素,但是在DOM中,鍵為0的元素將保留在列表的頂部,因此它不是DOM的新元素,而是用新用戶的名稱更新的相同元素。新元素將是具有鍵1的元素(并且將使用已經存在的用戶的數據來創建)等等...

這就是為什么使用數組的索引作為鍵不是一個好主意。

因此,如果您希望為添加到數組中的每個新元素播放動畫,您必須使用唯一的鍵來標識用戶(例如,它的id,它是最佳選項,或者它的名稱)。在您的例子中,用戶似乎只是一個字符串,所以您應該這樣使用它:

userList.map((user: any) => {
  return (
    <div key={user} className='user'>{user}</div>
  )
})

希望說清楚:)