Uncaught TypeError: 'set' on proxy: trap returned falsish for property

最近在学习ES6的Proxy,想通过Proxy的set拦截实现修改数据后自动刷新DOM的一个小功能,但是遇见了“Uncaught TypeError: 'set' on proxy: trap returned falsish for property **”错误。本文将解决该问题!!!

最近在学习ES6的Proxy,想通过Proxy的set拦截实现修改数据后自动刷新DOM的一个小功能,但是遇见了“Uncaught TypeError: 'set' on proxy: trap returned falsish for property **”错误。截图如下:

Uncaught TypeError: 'set' on proxy: trap returned falsish for property

我的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ES6 Proxy</title>
</head>
<body>

    <h2 id="title"></h2>
    <div id="descript"></div>
    
    <script type="text/javascript">
    
    // 封装一下
    // 数据绑定,当某些数据改变时候同步更新dom
    
    class DomAutoFlush {
    
        constructor(data) {
            this.data = new Proxy(data, {
                set: function(target, property, value) {
                    target[property] = value;
                    
                    // 更新Dom
                    let docObj = document.getElementById(property);
                    docObj.innerHTML = target[property];
                }
            });
        }
        
        setData(argData) {
            for(let item in argData) {
                let val = argData[item];
                try {
                    if(val !== this.data[item]) {
                        this.data[item] = val;
                    }
                } catch(e) {
                    console.error(e)
                }
            }
        }
    
    }
    
    
    // 定义我们的数据
    let obj = new DomAutoFlush({
        title: '',
        descript: ''
    });
    
    // 定时更新数据代理数据 proxyData,有代理对象内部去更新Dom
    setInterval(function(){
        obj.setData({
            title: new Date().toLocaleString(),
            descript: new Date().toLocaleTimeString()
        });
    }, 1000);
    
    </script>
</body>
</html>

在网上Google了很久,原来是我在Proxy的set中没有返回值。返回true表示设置成功,false表示设置失败。修改Proxy代码如下:

constructor(data) {
    this.data = new Proxy(data, {
        set: function(target, property, value) {
            target[property] = value;
            
            // 更新Dom
            let docObj = document.getElementById(property);
            docObj.innerHTML = target[property];
            
            // ##### 就是这行代码 #####
            return true;
        }
    });
}

问题就解决了。

沉浸于现实的忙碌之中,没有时间和精力思念过去,成功也就不会太远了。——雷音
2 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号