You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Inertia.js与Vue.js中更新属性?proxy set报错如何解决?

Inertia.js 只读props赋值报错解决方案

报错根因

Inertia.js 传递给组件的所有props默认是只读的响应式代理,遵循单向数据流设计,禁止在组件内部直接修改props值,直接对this.list赋值触发了代理的set拦截规则,才会返回该错误。

可选解决方法

  • 方案1:本地维护props拷贝(适合仅前端修改数据、不需要同步回Inertia全局状态的场景)
    将接收的list props深拷贝一份存到组件本地data中,后续修改和渲染都使用本地变量:
// 组件data定义
data() {
  return {
    // 深拷贝props避免引用代理对象
    localList: structuredClone(this.list)
  }
},
props: {
  list: {
    type: Object, 
    default: {}
  }
},
methods: {
  updateTable(filters) {
    axios.post(route('updateList'), filters)
      .then(r => {
        // 直接修改本地状态,不会触发代理限制
        this.localList = r.data
      })
  }
}
  • 方案2:使用Inertia局部刷新(适合需要服务端返回最新数据、同步更新Inertia全局props的场景)
    不要自行使用axios发送请求,改用Inertia内置的路由方法触发局部更新,Inertia会自动同步更新props,不需要手动赋值:
updateTable(filters) {
  this.$inertia.post(route('updateList'), filters, {
    // 仅更新list props,减少传输数据量
    only: ['list'],
    // 保留组件现有本地状态,避免重置其他输入值
    preserveState: true
  })
}

使用该方案时需要服务端处理完请求后,返回包含最新list字段的响应即可,组件会自动感知props的更新触发重渲染。

内容的提问来源于stack exchange,提问作者marks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:48:03