【问题标题】:Proxy not detecting change on nested array代理未检测到嵌套数组的更改
【发布时间】:2017-12-07 06:03:25
【问题描述】:

模块代码:

const fs = require('fs');

class database {
    constructor(database, object) {
        typeof database === "object" && (object = database);
        this.file = (typeof database === "string" ? database : 'db') + '.json';
        object && fs.writeFileSync(this.file, JSON.stringify(object));
        this.db = fs.existsSync(this.file) ? JSON.parse(fs.readFileSync(this.file, 'utf-8')) : {};
        return new Proxy(this.db, this)
    }

    set(target, key, value) {
        this.db[key] = value;
        fs.writeFileSync(this.file, JSON.stringify(this.db));
    }

}

module.exports = database;

示例脚本:

var db = require('./index.js')
var test = new db();

test.a = []; // Proxy is called here
test.a.push('a'); // It's not called here, despite test.a being set.

我希望 set 处理程序在对象更新时触发,但是当推送到对象内部的数组时,它不会发生。为什么不开火?

我正在使用节点 v8.1.4。据说所有代理问题都在 v6 之后得到修复。

【问题讨论】:

    标签: javascript node.js proxy es6-proxy


    【解决方案1】:

    不幸的是,代理只能观察对目标对象所做的更改——代理不能观察对嵌套在目标上的其他对象的更改。

    testtest.a 是两个独立的对象。因此,虽然Proxy 将在test 发生更改时调用set,但在test.a 发生更改时不会调用set

    如果您想观察对象的变化以及该对象的所有嵌套子对象,那么您需要use a library 专门为该工作而构建。

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 1970-01-01
      • 2020-11-22
      • 2019-06-06
      • 2018-09-18
      • 2018-07-31
      • 2021-11-13
      • 2019-09-22
      相关资源
      最近更新 更多