我有两个独立的(假设是因为它们有不同的键)v-for元素的div,在它们里面,有一个刷新按钮来更新相对div的健康状况。这就是为什么我用Tailwind CSS => 'animate-spin'在我的按钮上放了一个旋转动画。
问题是每当我点击其中一个div的刷新按钮时,尽管我为列表中的每个元素都有一个键值,但它会旋转两个刷新图标。我的预期行为是只旋转点击按钮的图标。
const list: Ref<Array<SomeType>> = ref([
{
name: 'Item 1',
title: 'XXXXXX',
healthCheck: true
},
{
name: 'Item 2',
title: 'XXXXXX',
healthCheck: false
}
])
字符串
我的refreshStatus函数:
const isStatusRefreshed: Ref<boolean> = ref(false)
const refreshStatus = async (name: string): Promise<void> => {
isStatusRefreshed.value = true
// Some request and according to response, I manipulate healthCheck field of relative object.
// Ex. item.healthCheck = response.status === 200
isStatusRefreshed.value = false
}
型
HTML部分:
<li v-for="listItem in list" :key="listItem.name" :data-index="listItem.name"
class="col-span-1 flex flex-col divide-y divide-gray-200 rounded-lg bg-white text-center shadow-xl">
<!-- Some other components.. -->
<button @click="refreshStatus(listItem.name)"
:class="[!isStatusRefreshed ? '' : 'animate-spin', 'hover:cursor-pointer']">
<i class="bi bi-arrow-clockwise" style="line-height: 16px; font-size: 16px; color: rgb(112, 112, 112);"></i>
</button>
<!-- Some other components.. -->
</li>
型
我也试着用Transition Group.来 Package 我的li,我错过了什么?
1条答案
按热度按时间fnvucqvd1#
你没有理解
isStatusRefreshed
ref的行为。它的值对于迭代列表中的每个项目都是相同的。它的值独立于键控项目列表迭代,并且在v-for
循环的所有迭代中都是相同的。要只显示相关的按钮旋转,请考虑将
isStatusRefreshed
作为每个项目本身的变量:个字符
或者将
isStatusRefreshed
作为数组,每个元素对应一个元素:的字符串