Skip to content

(十)babel处理js非标准语法

阿峰 edited this page May 29, 2023 · 1 revision

步骤十

babel处理js非标准语法

现在react主流开发都是函数组件和react-hooks,但有时也会用类组件,可以用装饰器简化代码。

  1. 新增src/components/Class.tsx组件, 在App.tsx中引入该组件使用
import React, { PureComponent } from "react";

// 装饰器为,组件添加age属性
function addAge(Target: Function) {
  Target.prototype.age = 111
}
// 使用装饰圈
@addAge
class Class extends PureComponent {

  age?: number

  render() {
    return (
      <h2>我是类组件---{this.age}</h2>
    )
  }
}

export default Class
  1. 需要开启一下ts装饰器支持,修改tsconfig.json文件
// tsconfig.json
{
  "compilerOptions": {
    // ...
    // 开启装饰器使用
    "experimentalDecorators": true
  }
}

上面Class组件代码中使用了装饰器,目前js标准语法是不支持的,现在运行或者打包会报错,不识别装饰器语法,需要借助babel-loader插件,

  1. 安装依赖
npm i @babel/plugin-proposal-decorators -D
  1. 在babel.config.js中添加插件
module.exports = { 
  // ...
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }]
  ]
}

现在项目就支持装饰器了。

Clone this wiki locally