在初次使用React 的裝飾器時,第一次在項目中使用 @ 會報錯,原因是react默認是不支持裝飾器的,所以才會報錯,所以是需要做一些配置來支持裝飾器。
查了很多資料終於徹底解決,下面我將列出如何給裝飾器打好前戰!
如果沒有創建react項目后面都是徒勞啦。
1 npx create-react-app demo
創建好項目之后才能進行后續操作。
- 首先,安裝插件
1 "devDependencies": { 2 "@babel/core": "^7.10.5", 3 "@babel/plugin-proposal-decorators": "^7.10.5", 4 "@babel/preset-env": "^7.10.4", 5 "customize-cra": "^1.0.0", 6 "http-proxy-middleware": "^1.0.5", 7 "react-app-rewired": "^2.1.6" 8 }
- 在
package.json中修改scripts的運行屬性值
1 "scripts": { 2 "start": "react-app-rewired start", 3 "build": "react-app-rewired build", 4 "test": "react-app-rewired test", 5 "eject": "react-scripts eject" 6 },
- 在項目的根目錄下新建一個
config-overrides.js文件(文件名一定不要寫錯,因為會根據這個文件名進行編譯代碼)
1 // config-overrides.js 內容 2 const path = require('path') 3 const { 4 override, 5 addDecoratorsLegacy 6 } = require('customize-cra') 7 8 function resolve(dir) { 9 return path.join(__dirname, dir) 10 } 11 12 const customize = () => (config, env) => { 13 config.resolve.alias['@'] = resolve('src') 14 if (env === 'production') { 15 config.externals = { 16 'react': 'React', 17 'react-dom': 'ReactDOM' 18 } 19 } 20 21 return config 22 } 23 24 module.exports = override(addDecoratorsLegacy(), customize())
基本完成上面這三步就可以正常使用裝飾器了,再也不會報 @的錯誤了。同時Support for the experimental syntax 'decorators-legacy' isn't currently enabled這個錯誤也將消失。
在引入裝飾器之后,雖然不會報錯,但是下面的函數名還是會有飄紅,這時需要進行一些相應的設置。

打開設置 => 在搜索欄輸入 decorator 找到全稱為 JavaScript › Implicit Project Config: Experimental Decorators 的設置項,將其勾選上,保存即可。


