vue-property-decorator Prop失效问题排查记录

问题说明

近期遇见一非常诡异的问题,vue-property-decorator声明的porp初始值,竟然赋不上了,直接上图:

代码实现如下:

上游组件通过beHidden控制hide显隐,并且也有加初始值。

结果跑起来在项目里一看:

beHidden已经顺利赋值了,但是hide没有,也就是undefined。非常诡异,遂排查。

排查过程

直接进入断点,找到beHiddenhidden的赋值

可以看到这个类刚初始化的时候,beHidden是已经被赋值了的,但是经过神秘逻辑

js 复制代码
c(this, "beHidden", void 0),

之后,等到将beHidden赋值给hide的时候,beHidden就变为undefined了。

那么问题就定位到了,这个神秘的代码又是什么呢?

看看压缩前的代码,发现了这个:

js 复制代码
_defineProperty(this, "beHidden", void 0);

function _defineProperty(obj, key, value) {
  key = _toPropertyKey(key);
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }
  return obj;
}

然后就定位到了 @babel/plugin-proposal-class-propertiesbabel.dev/docs/babel-...

简直了,感情是 @babel/plugin-proposal-class-properties把Class里没赋初值的数据都给赋值为void 0了。

解决方案

感觉寄了,这依赖是cli-plugin-babel引入的,好像也没法处理呀。只能先加watch处理了,反正新项目也直接vue3了。继续深究也意义不大了。

js 复制代码
@Watch("beHidden", { immediate: true })
    onBeHidden(nv: boolean) {
        this.hide = nv;
    }
相关推荐
李高钢5 分钟前
Python Flask 框架入门:从零搭建你的第一个 Web 应用
前端·python·flask
特立独行的猫A6 分钟前
用仓颉语言写 Coding Agent:cjh 是怎么实现的
前端
特立独行的猫A8 分钟前
cjh:基于华为仓颉语言的原生 Coding Agent Harness 实践与设计思考
前端
mONESY13 分钟前
LangChain 结构化输出三兄弟:ToolCall、OutputParser、withStructuredOutput 彻底讲透
javascript
晚安日记wanna15 分钟前
大文件分片上传的五层追问从 Blob 切片到秒传与弱网容错
前端·面试
Htr_20 分钟前
Anysite.io 使用指南:把整个 Web 变成 AI 智能体的数据库
前端·数据库·人工智能
知兀22 分钟前
【前端】受控和非受控组件
前端·javascript·react
玉宇夕落23 分钟前
别再把 SSE 当普通流式了!从 EventSource 到 LangChain,一次讲透实时推送与流式输出
前端
CappuccinoRose25 分钟前
专项事件体系
前端·学习·网络状态·表单事件·剪贴板事件·拖放事件·页面可见性
李剑一30 分钟前
各位产品经理求你们优化一下吧,暗黑模式最大的BUG!文中附解决方案
前端