Accessing ref values from composable(从Composable访问引用值)
本文介绍了从Composable访问引用值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的Vue3应用代码如下:
<template>
{{ names_data }}
</template>
<script>
import getData from "./composables/getData"
export default {
name: "App",
setup() {
var filenames = ["test1.json", "test2.json"];
const { names_data, error, load_data } = getData(
filenames
);
load_data();
console.log("names", names_data)
console.log("error", error)
return { names_data };
},
};
</script>
导入的可组合函数如下:
import { ref } from "@vue/runtime-core";
const getData = (filenames) => {
const names_data = ref([])
const error = ref(null)
const load_data = async () => {
try {
var promises = [];
for (let i = 0; i < filenames.length; i++) {
var filename = filenames[i]
promises.push(
fetch(`data/${filename}`).then(
(res) => (res.ok && res.json()) || Promise.reject(res)
)
);
}
const data = await Promise.all(promises);
names_data.value = data
} catch (err) {
error.value = err.message;
console.log(error.value);
}
};
return { names_data, error, load_data }
};
export default getData
数据文件包含以下内容:
test1.json
{
"members": {
"0": "Alice",
"1": "Bob",
"2": "Charlie"
}
}
test2.json
{
"members": {
"0": "David",
"1": "Elizabeth",
"2": "Fred"
}
}
这些都起作用了:我可以从屏幕上显示的模板中看到names_data
。然而,在控制台中,names_data
显示如下:
RefImpl{_浅:假,dep:未定义,__v_isRef:真,_rawValue:数组(0),_Value:代理} 副署长:设置(1){反应效果} __v_isRef:True _rawValue:(2)[{…},{…}] _浅:假 _值:代理{0:{…},1:{…}} 值:(...) [[原型]]:对象
我希望能够访问names_data
中的值以进行进一步处理,比如将它们放入表中,但当我在App中访问console.log(names_data.value)
时,我会得到一个指向空数组的代理对象。
我认为names_data
对象不知何故失去了反应性,因为它在调用load_data()
时没有更新。但它在模板中显然是反应性的。因此,我对这里发生的事情感到困惑。
如何访问引用的值以进一步处理它?
推荐答案
工作正常。如果不使用反应性,这将导致this流行的争用条件。使用反应性的要点是值是反应性的,并且可以通过组合API在其他地方组合。
在这种情况下,不需要等待load_data
在setup
Body中完成。它应该在值可用时访问:
const { names_data, error, load_data } = getData(...);
load_data();
watch(names_data, data => {
console.log(data);
});
这篇关于从Composable访问引用值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:从Composable访问引用值
基础教程推荐
猜你喜欢
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 动态更新多个选择框 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01