'set' on proxy: trap returned falsish for property

img

朋友们 求解
vue3 代码:
store.commit('routingTitle', name)
然后从上个页面进来报错:


index.js?t=1688535789194:292 Uncaught (in promise) TypeError: 'set' on proxy: trap returned falsish for property 'routingTitle'
    at Store2.routingTitle (index.js?t=1688535789194:292:23)
    at wrappedMutationHandler (vuex.esm-bundler.js:315:13)
    at commitIterator (vuex.esm-bundler.js:1005:7)
    at Array.forEach (<anonymous>)
    at vuex.esm-bundler.js:1004:11
    at Store2._withCommit (vuex.esm-bundler.js:1163:3)
    at Store2.commit (vuex.esm-bundler.js:1003:8)
    at Store2.boundCommit [as commit] (vuex.esm-bundler.js:940:19)
    at factory.vue:71:9
    at runtime-core.esm-bundler.js:2746:40

求帮助

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    问题描述中的错误提示"s set' on proxy: trap returned falsish for property"意味着在代理对象上的set捕获器返回了一个假值。当我们使用Proxy对象对一个对象进行代理时,可以使用set捕获器来拦截对对象属性的设置操作。

    要解决这个问题,我们需要分析代码并找出可能引发错误的原因。根据参考资料的描述,set捕获器接收四个参数:目标对象、属性key、属性值和代理对象。在代码中,我们需要检查set捕获器的实现,并确保它返回了一个真值,否则就会报错。

    根据提供的代码片段,尚未完整提供set捕获器的具体实现。因此,我们需要假设set捕获器的代码如下:

    const handler = {
      set(target, property, value, receiver) {
        // 在这里执行对属性的设置操作,并返回一个真值
        return Reflect.set(target, property, value, receiver);
      }
    }
    

    要解决问题,我们需要确保set捕获器正确地处理了属性的设置操作,并返回一个真值。在代码上下文中,我们可以尝试使用Reflect.set函数来实际设置属性,并返回Reflect.set的返回值以作为set捕获器的返回值。

    完整的解决方案如下:

    const obj = {
      // 这里可以添加需要代理的属性
    }
    
    const handler = {
      set(target, property, value, receiver) {
        // 在这里执行对属性的设置操作,并返回一个真值
        return Reflect.set(target, property, value, receiver);
      }
    }
    
    const proxy = new Proxy(obj, handler);
    

    通过这种方式,我们可以正确地使用set捕获器处理属性的设置操作,并返回真值,从而避免了报错。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^