Vuex 问题将数据转换为观察者
Vuex issue transforming data into observer
我正在使用 Vuex 来管理我的应用程序的状态。当我调度一个从服务器 API 调用一些数据的动作时,如果这个动作提交了一个突变,我的数据就会以某种方式转换为观察者对象而不是实际数据。这是 vuex 中的预期行为还是错误?
操作:
async getDataFromApi(context, payload) {
try {
let data = callApi(foo);
context.commit("SET_REPORTING_DATA", { data, id: payload })
return data;
} catch (e) {
console.log(e.code);
console.log(e.message);
return false;
}}
变异
SET_STATE(state, data) {
state.list = { ...state.list, [data.id]: data.data }
}
奇怪的是,当我记录从 API 获得的数据时,我得到了一个观察者对象,尽管我返回的是 api 的原始数据。
这不是问题,而是浏览器和 Vue 的反应系统之间的警告。要了解有关 Vue 反应性的更多信息,请查看他们在 Reactivity in Depth 上的文档,他们在那里解释了它是如何工作的,甚至提到了这个警告:
One caveat is that browser consoles format getter/setters differently when converted data objects are logged...
并且他们建议使用 vue-devtools 以获得更友好的内省界面。
然而,有一种方法可以在不使用 vue-devtools 的情况下查看记录的变量及其数据,方法是使用 console.log(JSON.parse(JSON.stringify(data)))
记录它们,如下所示,使用浏览器控制台验证它是否正确,正如 Whosebug 的控制台已经在没有观察者的情况下显示的那样。
var app = new Vue({
el: '#app',
data: () => ({
obj: {
a: 123
}
}),
created() {
console.log('Observer');
console.log(this.obj);
console.log('Data');
console.log(JSON.parse(JSON.stringify(this.obj)));
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>
我正在使用 Vuex 来管理我的应用程序的状态。当我调度一个从服务器 API 调用一些数据的动作时,如果这个动作提交了一个突变,我的数据就会以某种方式转换为观察者对象而不是实际数据。这是 vuex 中的预期行为还是错误?
操作:
async getDataFromApi(context, payload) {
try {
let data = callApi(foo);
context.commit("SET_REPORTING_DATA", { data, id: payload })
return data;
} catch (e) {
console.log(e.code);
console.log(e.message);
return false;
}}
变异
SET_STATE(state, data) {
state.list = { ...state.list, [data.id]: data.data }
}
奇怪的是,当我记录从 API 获得的数据时,我得到了一个观察者对象,尽管我返回的是 api 的原始数据。
这不是问题,而是浏览器和 Vue 的反应系统之间的警告。要了解有关 Vue 反应性的更多信息,请查看他们在 Reactivity in Depth 上的文档,他们在那里解释了它是如何工作的,甚至提到了这个警告:
One caveat is that browser consoles format getter/setters differently when converted data objects are logged...
并且他们建议使用 vue-devtools 以获得更友好的内省界面。
然而,有一种方法可以在不使用 vue-devtools 的情况下查看记录的变量及其数据,方法是使用 console.log(JSON.parse(JSON.stringify(data)))
记录它们,如下所示,使用浏览器控制台验证它是否正确,正如 Whosebug 的控制台已经在没有观察者的情况下显示的那样。
var app = new Vue({
el: '#app',
data: () => ({
obj: {
a: 123
}
}),
created() {
console.log('Observer');
console.log(this.obj);
console.log('Data');
console.log(JSON.parse(JSON.stringify(this.obj)));
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>