Vue / Javascript 变量的奇怪问题

Weird issue with Vue / Javascript variables

老实说,我什至不知道如何搜索这个问题(要写什么搜索参数),但无论哪种方式都是有点奇怪的问题,我迫切需要帮助。

所以我想做一些简单的事情,事件发送 "form-change",当它发生时,我们在 "[=39] 中设置新值=]" 对象。相当简单。我不希望 this.data 有反应 我只是想更新它。

// Find our data object which we want to update/change
if (form.field.includes('.')) {

    let find = form.field.split('.'), level = this.data;
    for (let index = 0; index < find.length; index++) {

        if (level[find[index]] !== undefined) {

            level = level[find[index]];

        } else {

            level = undefined;

        }

    }

    if (level !== undefined)
        level = setFieldData();

}

这很简单,我们有字段名称 "inspect.book" 并且当更新到来时(事件)我们只需使用点拆分成多树并更新"this.data.inspect.book" 为新值。但它不起作用。值不变。

但是来自实际 this.data.inspect.book 的值使用:

console.log(level);

但是,如果我这样做:

this.data[ form.field.split( '.' )[ 0 ] ][ form.field.split( '.' )[ 1 ] ] = setFieldData();

它工作正常。所以对变量的“引用”不起作用......这怎么可能?看起来像是 javascript 中的错误,或者是 vue/reactivity 中的错误?

有没有人知道如何让它工作?

所以您正在尝试使用符号来更新表单数据?

我会做那样的事情:

_update(fieldName, value) {
            // We split segments using dot notation (.)
            let segments = fieldName.split(".");

            // We get the last one
            let lastSegment = segments.pop();

            // We start with this.data as root
            let current = this.data

            if(current) {
                // We update current by going down each segment
                segments.forEach((segment) => {
                    current = current[segment];
                });

                // We update the last segment once we are down the correct depth
                current[lastSegment] = val;
            }
        },

如果我以你为例:

if (form.field.includes('.')) {

    let find = form.field.split('.'), level = this.data;
    for (let index = 0; index < find.length - 1; index++) {

        if (level[find[index]] !== undefined) {

            level = level[find[index]];

        } else {

            level = undefined;

        }

    }

    if (level !== undefined)
        level[find.pop()] = setFieldData();

}

我用 find.length - 1 替换了 find.length 并将 level = setFieldData() 替换为 level[find.pop()] = setFieldData()

你应该更新对象的 属性,而不是实际覆盖值, 因为如果您覆盖该值,原始值将不会更新。