Javascript 正确使用Vue 3中的反应阵列

Javascript 正确使用Vue 3中的反应阵列,javascript,arrays,vue.js,vuejs3,Javascript,Arrays,Vue.js,Vuejs3,我正在开发我的Vue 3应用程序,在按预期工作时遇到了一些问题 我需要的是正确访问反应式阵列。为了澄清起见,让我向您展示代码: 我有一个全局存储store/questions/index.js,代码如下: const useQuestionsAndAnswers = () => { const data = reactive([]) const getQuestionsAndAnswers = async () => { const response =

我正在开发我的Vue 3应用程序,在按预期工作时遇到了一些问题

我需要的是正确访问反应式阵列。为了澄清起见,让我向您展示代码:

我有一个全局存储
store/questions/index.js
,代码如下:


const useQuestionsAndAnswers = () => {
    const data = reactive([])
    const getQuestionsAndAnswers = async () => {
      const response = await fetch('../../../db/questions.json')
      const fetchedData = await response.json();
      if(response.status === 200) {
        fetchedData.data.forEach(obj => data.push(obj))
        console.log(data[0]);  <--------- // This console.log works ok
      } else {
        console.log('Something went wrong')
      }
    };
      
    onMounted(() => {
        getQuestionsAndAnswers();
    });

    return { data }
}

export default useQuestionsAndAnswers;
这就是事情变得奇怪的部分。DOM
{{data[0]}
中的绑定数据运行良好,并显示与该位置相对应的整个对象,但如果我尝试以
data[0]的形式访问
question
键,question
将显示数据,但如果我刷新页面,则会显示未定义的数据。我好像失去了反应性

另一个问题发生在我的
setup()
函数中。如果我
console.log(data)
使用
array
获得预期的
Proxy
。但是,如果我试图从前面提到的数组
console.log(数据[0])
中访问一个对象,我会再次得到
undefined

最后,我将向您展示一个我收到的
json
示例:

{
    "data": [
        {
            "question" : "Estás en medio de una pandemia mundial y estatizas una conocida empresa de alimentos (su nombre empieza con V de Vicentín) que no le paga a sus acreedores hace años. Qué harías ante el embate de Clarín?",
            "image": "@/assets/alberto.png",
            "id": 1,
            "answers": [
                {
                    "id": 1,
                    "answer": "Me haría el picante unos días y después me tiraría atrás.",
                    "points": 2,
                    "slug": "haria-el-picante"
                }
            ]
        }
    ]
}
所以我想要的是正确地访问数组并显示我想要的数据


提前谢谢

如果有人正在经历同样的事情,我会告诉你,解决方案非常简单:

使用
v-if='data'
我想我是在检查数组是否确实存在,但您可能知道,Vue 3在处理对象时使用
Proxy
,因此我实际上是在检查对象是否存在

在这种情况下,解决方案就是在我的句子中添加
length
v-if='data.length>0'
解决了整个问题。如果您需要使用
中的数组进行计算,我的
setup()函数中也可以使用相同的方法


就这样。

你试过
$
没有,但我不确定为什么我应该在这里使用
$
引用。如果你能详细说明,我将非常感激。
{
    "data": [
        {
            "question" : "Estás en medio de una pandemia mundial y estatizas una conocida empresa de alimentos (su nombre empieza con V de Vicentín) que no le paga a sus acreedores hace años. Qué harías ante el embate de Clarín?",
            "image": "@/assets/alberto.png",
            "id": 1,
            "answers": [
                {
                    "id": 1,
                    "answer": "Me haría el picante unos días y después me tiraría atrás.",
                    "points": 2,
                    "slug": "haria-el-picante"
                }
            ]
        }
    ]
}