Javascript 正确使用Vue 3中的反应阵列
我正在开发我的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 =
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"
}
]
}
]
}