vue中如何根据获取的数据增加图标数量

How to increase the number of icons according the fetched data in vue

我发送了一个 Api 请求并获得了不同数量的参与者(从 1 到 5)。根据这个数字,图标的数量应该出现在模式上。如果有 3 个参与者,则模态中应该有 3 个用户图标。 我知道在 React 里怎么做,但是我开始研究 Vue3 就不知道了。

<template>
  <p >
        Participants:
            <span > 
                <UserIcon />
           </span>
  </p>
</template>


 <script lang="ts">
    import { defineComponent } from '@vue/runtime-core';
    import {HeartIcon, UserIcon, XIcon } from '@heroicons/vue/solid'
    
    export default defineComponent({
        name: 'NewActivityModal',
        components: {HeartIcon, UserIcon, XIcon},
        randomActivity: {
            type: Object,
            required: true,
          }
        },            
    })
    
      </script>

在React中我会这样写。但是如何在Vue中重写呢?要清楚,放在哪里?

const participants = [
    <span >
      {userIcon}
    </span>,
  ];
  randomActivity.map((item) => {
    for (let i = 1; i < item.participants; i++) {
      participants.push(
        <span className="inline-block" key={`personIcon${i}`}>
          {userIcon}
        </span>
      );
    }
    return participants;
  });

首先,您创建一个计算 属性,其中 returns 参与者的数量(循环的计数器 x)。

然后你使用计算的 属性 到 运行 循环 x 次。

这是你想要实现的吗?

<template>
  <p >
    Participants:
    <span
      v-for="counter in numberOfParticipants"
      :key="counter"
    > 
      <UserIcon />
    </span>
  </p>
</template>


<script lang="ts">
  import { defineComponent } from '@vue/runtime-core';
  import {HeartIcon, UserIcon, XIcon } from '@heroicons/vue/solid'
  
  export default defineComponent({
    name: 'NewActivityModal',
    components: {HeartIcon, UserIcon, XIcon},
    props: {
      randomActivity: {
          type: Object,
          required: true,
        }
      }
    }, 
    computed: {
      numberOfParticipants () {
        return randomActivity
          .map(item => {
            return item.participants
          })
          .flat()
          .length
      }    
    } 
  })
</script>

感谢@tho-masn 让我明白了。并重写计算属性

numberOfParticipants () {           
        let participants = 1
        for(let i=1; i < this.randomActivity.participants; i++) {
          participants += 1;
        }       
        return participants
      }