如何在 Vue 3 Composition 中设置随机字母生成器 API

How to set up a random letter generator in Vue 3 Composition API

我正在尝试使用 Vue 3 Composition API 设置一系列按钮以连续显示随机字母。在设置函数中,我创建了 4 个带有一系列字母的独立数组。然后使用随机函数将字母随机化,然后使用由 onBeforeMount 生命周期挂钩调用的函数返回到屏幕。结果是每次刷新页面时,每个按钮上的字母都会更新。目前,我的代码设置为将每个字母常量初始化为空引用,如下所示:

    const letterDisplayOne = ref('')
    const letterDisplayTwo = ref('')
    const letterDisplayThree = ref('')
    const letterDisplayFour = ref('')

对我来说,上面的内容看起来很乱。所以我改为尝试重构,以便将常量合并为一个 ref 方法:

const { letterDisplayOne, letterDisplayTwo, letterDisplayThree, letterDisplayFour } = ref('')

但是,当我以这种方式设置常量和清空 ref 时,当它们在后续函数中被引用时,我无法解压缩每个常量的 .value。我的问题:是否可以以不阻止解包 .values(或其他错误)的方式合并多组常量?

这是我的完整代码:

模板

<template>
  <div div class="flex justify-center">
    <button @click="handleClick">Click for Audio</button>
    <button>{{ letterDisplayOne }}</button>
    <button>{{ letterDisplayTwo }}</button>
    <button>{{ letterDisplayThree }}</button>
    <button>{{ letterDisplayFour }}</button>
  </div>
</template>

脚本

<script>
import { ref } from 'vue' 
import { onBeforeMount } from 'vue';

export default {
  name: 'Button',
  components: {},
  setup() {

    const letterDisplayOne = ref('')
    const letterDisplayTwo = ref('')
    const letterDisplayThree = ref('')
    const letterDisplayFour = ref('')
    const letterArrayOne = ref(['a','b','c','d','e','f','g'])
    const letterArrayTwo = ref(['a','b','c','d','e','f','g'])
    const letterArrayThree = ref(['a','b','c','d','e','f','g'])
    const letterArrayFour = ref(['a','b','c','d','e','f','g'])
    const chosenOne = Math.floor(Math.random() * letterArrayOne.value.length)
    const chosenTwo = Math.floor(Math.random() * letterArrayTwo.value.length)
    const chosenThree = Math.floor(Math.random() * letterArrayThree.value.length)
    const chosenFour = Math.floor(Math.random() * letterArrayFour.value.length)

    const handleletterArray = () => {
      letterDisplayOne.value = letterArrayOne.value[chosenOne]
      letterDisplayTwo.value = letterArrayTwo.value[chosenTwo]
      letterDisplayThree.value = letterArrayThree.value[chosenThree]
      letterDisplayFour.value = letterArrayFour.value[chosenFour]
    }

    onBeforeMount(() => {
      handleletterArray()
    })

    return {  
    letterDisplayOne,
    letterDisplayTwo,
    letterDisplayThree,
    letterDisplayFour,
    letterArrayOne,
    letterArrayTwo,
    letterArrayThree,
    letterArrayFour, 
    handleletterArray, 
    onBeforeMount, 
    chosenOne,
    chosenTwo,
    chosenThree,
    chosenFour 
    }
  }
}
</script>

可能是:

const { letterDisplayOne, … } = toRefs(reactive({ letterDisplayOne: '', … }));

Refs 对两种常见情况特别有用。第一种情况是当值需要作为对象通过引用传递时。第二个是一个值不一致,不能表示为反应对象,而ref值可以是任何东西。

None 这些情况适用于此处,因此使用单独的参考没有实际好处。它可以只是:

const letters = reactive({ one: '', … });