【发布时间】:2021-12-07 16:31:12
【问题描述】:
我有一个 Vue.js 2 组件,其中一个数据成员应该是从 Array 扩展的自定义类 (Vector) 的数组。但是,当我将数组分配给数据成员时,数组的项不再是向量,而是普通数组。
这里是一个例子:https://codesandbox.io/embed/nervous-tu-7en2q?fontsize=14&hidenavigation=1&theme=dark
主要部分:
vector.js
export default class Vector extends Array {
/** Creat a vector from all arguments. */
constructor(...args) { ... }
get x() {
return this[0];
}
get y() {
return this[1];
}
};
export const square = [
new Vector(0, 0),
new Vector(1, 1),
]
组件:
<template>
<div id="app">
{{ title }}
({{ square[0][0] }}, {{ square[0][1] }})
({{ square[1].x }}, {{ square[1].y }})
</div>
</template>
<script>
import { square } from './vector.js';
export default {
name: "HelloWorld",
props: {
msg: String
},
data() {
return {
square,
title: 'hello'
}
},
mounted() {
console.log(this.square)
}
};
</script>
如果您查看控制台输出,您会看到正方形现在是两个数组的数组,而不是两个向量的数组:
(2) [数组(2),数组(2)]
问题:
- 这应该发生吗?如果是,为什么?
- 可以预防吗?一种选择是通过将其移出数据部分来防止它具有反应性,但这当然会扼杀良好的反应性部分。
【问题讨论】:
-
这是与 vue2 相关的主要问题之一。但是,这应该通过 vue3 或组合 api 来解决。基于代理,反应机制在后者中的工作方式不同。哪个应该保留向量的构造函数而不是破坏它。见:github.com/vuejs/composition-api
标签: javascript vue.js vuejs2