vue.js - 无法从 getter 检索变异数据
问题描述
我正在尝试使用 vuex 中存储的数据来渲染 d3 图。但我没有在 renderGraph() 函数中获取数据。
如何在 renderGraph() 中获取数据?
以下是存储方法。
存储/index.js
import Vue from "vue";
import Vuex from "vuex";
import * as d3 from "d3";
Vue.use(Vuex);
export const store = new Vuex.Store({
state: {
subscribers: []
},
getters: {
getterSubscribers: state => {
return state.subscribers;
}
},
mutations: {
mutationSubscribersData: (state, payload) => {
state.subscribers = payload;
}
},
actions: {
actionSubscribersData: async ({ commit }) => {
let subsData = await d3.json("./data/subscribers.json"); // some json fetching
commit("mutationSubscribersData", subsData);
}
}
});
下面是父组件
主页.vue
<template>
<div>
<MyGraph /> // child component rendering
</div>
</template>
<script>
import MyGraph from "./MyGraph.vue";
export default {
components: {
MyGraph
},
};
</script>
下面是子组件。
MyGraph.vue
<template>
<div>
<svg width="500" height="400" />
</div>
</template>
<script>
import { mapGetters, mapActions } from "vuex";
export default {
computed: {
...mapGetters(["getterSubscribers"])
},
methods: {
...mapActions(["actionSubscribersData"]),
renderGraph(data) {
console.log(data); // DATA NOT COMING HERE
// MyGraph TO BE RENDERED WITH THIS DATA
}
},
mounted() {
this.actionSubscribersData();
this.renderGraph(this.getterSubscribers);
}
};
</script>
我已经尝试过安装、创建的生命周期钩子。但没有发现数据来了。
解决方案
有比赛条件。actionSubscribersData
是async
并返回一个承诺。应该等待直到数据可用:
async mounted() {
await this.actionSubscribersData();
this.renderGraph(this.getterSubscribers);
}
推荐阅读
- python - 计算区别:加速对矩阵中所有行组合的操作
- c - 检查文件存在和读取权限
- z3 - Dafny,用序列中的值替换索引
- angular - 我在指令中注入的共享数据未定义
- python - 字典攻击 sha512 哈希使用 hashlib 和已知盐的 unix 密码
- javascript - 如何在闪亮的 textareaInput 中获取光标位置
- php - 绑定参数不起作用
- r - R中带有欧拉的欧拉图
- powershell - Rebol / Red 在 Windows 上调用 Headless Chrome
- javascript - 使用 pastebin API 发出简单的 POST 请求