最近做react项目的时候,使用的是create-react-app脚手架搭建的项目,用的ant-design框架,在使用UI框架的Form组件的时候,发现
Form.create
方法是一个典型的装饰器,于是就改成装饰器的写法dav框架
1、先安装包
yarn add @babel/plugin-proposal-decorators --save
2、将.webpackrc 改成.webpackrc.js然后具体配置
const config = {}; //用于跨域 config.proxy = { "/api": { "target": "http://localhost:7001", "changeOrigin": true, "pathRewrite": { "^/api": "" } } } //antd按需加载引入 config.extraBabelPlugins = [ ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }], //装饰器语法配置 [ "@babel/plugin-proposal-decorators", { "legacy": true } ] ] export default config;
在 creat-react-app创建的脚手架配置
1、先安装包
yarn add @babel/plugin-proposal-decorators --save
2、在项目根目录下创建.babelrc, config-overrides.js文件
{ "presets": [ "react-app" ], "plugins": [ [ "import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" // `style: true` 会加载 less 文件 } ], [ "@babel/plugin-proposal-decorators", { "legacy": true } ] ] }
3、删除package.json的babel配置
// 删除下面几行 "babel": { "presets": [ "react-app" ] },
这样我们就可以使用装饰器语法了
装饰器 语法使用之前 拿antd的包为例子
// const WrappedNormalLoginForm = Form.create({ name: 'normal_login' })(Login);
// export default WrappedNormalLoginForm; 抛出的是这个改变后的变量 而不是Login这个组件了
使用后
@Form.create({ name: 'normal_login' }) 注意这里不要加分号 放在class上面
export default Login