【发布时间】:2022-01-11 19:25:26
【问题描述】:
这是我之前的问题的后续问题: Accessing ref values from composable
这是我的应用代码:
<template>
{{ reversed_names }}
</template>
<script>
import { ref, watchEffect } from "@vue/runtime-core";
import getData from "./composables/getData";
import reverseNames from "./composables/reverseNames";
export default {
name: "App",
setup() {
var filenames = ["test1.json", "test2.json"];
const { names_data, error, load_data } = getData(filenames);
load_data();
const reversed_names = ref({});
watchEffect(() => {
const reversed_names = reverseNames(names_data.value);
console.log("revnames inside watchEffect", reversed_names.value);
});
console.log("revnames outside watchEffect", reversed_names);
return { names_data, reversed_names };
},
};
</script>
这里是reverseNames 函数:
import { ref } from "@vue/runtime-core";
const reverseNames = (names_data) => {
const reverse_names = ref({})
var filenames = Object.keys(names_data)
for (let f in filenames) {
var filename = filenames[f]
reverse_names.value[filename] = {}
var members = names_data[filename]["members"]
for (let n in members) {
let name = members[n];
var reverseName = name.split("").reverse().join("");
reverse_names.value[filename][name] = reverseName
}
}
return reverse_names
};
export default reverseNames
watchEffect 在那里,因此我可以在从文件加载数据后使用names_data(请参阅上面的链接问题)。
该代码在调用reverseNames 之前运行良好。
names_data.value 包含以下内容:
{ "test1.json":
{ "members":
{ "0": "Alice",
"1": "Bob",
"2": "Charlie"
}
},
"test2.json":
{ "members":
{ "0": "David",
"1": "Elizabeth",
"2": "Fred"
}
}
}
这是令人困惑的部分:
在watchEffect 函数中,控制台会显示该函数的正确返回字典。
但是,在watchEffect 函数之外,控制台只显示在watchEffect() 调用之前定义的空ref({})。
是setup()返回并显示在模板中的空字典。
如何让setup() 从watchEffect 内部返回reversed_names?
【问题讨论】:
标签: vue.js vuejs3 vue-reactivity