Vue 中使用 JSX 问题收集

on 开头的属性名

在用 elementui 中的 el-upload 的时候,他们组件中有一个属性 on-change ,也不知道谁想出来的属性名,太扯淡了,非要 on 开头,我开始的代码如下:

<el-upload
        action="/"
        list-type="picture-card"
        class="createopt__picupload"
        auto-upload={false}
        show-file-list={false}
        file-list={cellValue}
        accept=".gif,.png,.jpg,.jpeg"
        on-change={this.createOptPicUploadChange}
>
        <i class="el-icon-plus"></i>
</el-upload>

发现并不执行 createOptPicUploadChange 这个函数,看了一下编译后的代码,编译如下,居然把 on-change 编译到 on 里面去了,不正常,我要编译到 attrs 中才算正常啊

        "el-upload",
              {
                attrs: {
                  action: "/",
                  "list-type": "picture-card",
                  "auto-upload": false,
                  "show-file-list": false,
                  "file-list": cellValue,
                  accept: ".gif,.png,.jpg,.jpeg"
                },
                "class": "createopt__picupload",
                 on: {
                  "change": _this.createOptPicUploadChange
                }
              },

后来我看了一下 babel-plugin-transform-vue-jsx 中编译源码,发现了关键字 props|domProps|on|nativeOn|hook,居然有 on 开头的就编译成了函数,我就改成了 propsOn-change={this.createOptPicUploadChange},再看编译结果:

              "el-upload",
              {
                attrs: {
                  action: "/",
                  "list-type": "picture-card",

                  "auto-upload": false,
                  "show-file-list": false,
                  "file-list": cellValue,
                  accept: ".gif,.png,.jpg,.jpeg"
                },
                "class": "createopt__picupload", props: {
                  "on-change": _this.createOptPicUploadChange
                }
              },

on-change 跑到 props 下了,再执行,成功。多看源码还是有好处的....

猜你喜欢

转载自www.cnblogs.com/fws407296762/p/9076143.html