首页 > 解决方案 > 在本地存储道具(vue2)

问题描述

下列的:

将数据从 Props 传递到 vue.js 中的数据

我有:

https://codesandbox.io/s/u3mr8

给出以下警告:

在此处输入图像描述

(这个想法是避免改变道具)。在简单的复制对象操作中会发生什么副作用?我不明白。该函数只是将道具保存到数据中。

拖放失败,原因如下:

在此处输入图像描述

你真的需要一个计算道具的设置器吗?

看着:

已分配计算属性,但它没有设置器 - 切换组件

我想出了:

https://codesandbox.io/s/39sgo

这很棒,没有警告,没有错误;只是组件不再渲染(无法从 prop 中获取保存的数据)。

任何想法/建议/帮助/建议都会非常非常棒。

标签: javascriptvue.jsvuejs2vue-component

解决方案


我认为抛出错误是因为不允许在 getter 中设置生成计算属性的值。在得到计算结果的同时修改初始值是一个逻辑循环。相反,您可以在初始调用 getter 时返回 prop 值(如果尚未设置本地值)。

  get() {
    if (!this.itemSectionPropsLocal["itemSectionCategory"]) {
      return Object.assign({}, this.itemSectionProps)[
        "itemSectionCategory"
      ];
    }
    return this.itemSectionPropsLocal["itemSectionCategory"];
  },
  set(value) {
    this.itemSectionPropsLocal = value;
  },

此外,在 setter 中,您应该分配接收到的值而不是 prop。如果您想在安装后道具值发生变化时更新本地值,您应该使用观察者。

watch: {
  itemSectionProps: {
    deep: true,
    handler(val){
      this.getPropsLocal = Object.assign({}, val["itemSectionCategory"])
    }
  }
}

推荐阅读