在create-react-app建立的專案下允許函式繫結運算子
前話
React的函式繫結一致是個問題,主要有下面幾種方式:
- 事件處理器動態繫結
export default class Com extends React.Component {
render() {
<input type="button" value="點我" onClick={this.method.bind(this)} />
}
}
- 建構函式繫結
export default class CartItem extends React.Component {
constructor(props) {
super(props);
this.method = this.method.bind(this);
}
render() {
<input type="button" value="點我" onClick={this.method} />
}
}
- 建構函式 + 箭頭函式
export default class CartItem extends React.Component {
constructor(props) {
super(props);
this.method = (ev) => {...}
}
render() {
<input type="button" value="點我" onClick={this.method} />
}
}
這個是babel支援的,還不是標準
export default class CartItem extends React.Component {
method = () => {...};
render() {
<input type="button" value="點我" onClick={this.method} />
}
}
- stage 0 的 transform-function-bind
export default class CartItem extends React.Component {
method(){...};
render() {
<input type="button" value="點我" onClick={::this.method} />
}
}
最後一種很帥氣, 然並軟,我使用就直接報錯。 臣不服,不服。
於是尋找方案, 因為是create-react-app建立的專案。
我的思考方案如下
- create-react-app內建支援的配置
在awesome-create-react-app中找到how-to-use-custom-babel-presets, 看到了光芒,光芒啊。
高興太早,死的也早,Adding support for custom babel configuration被拒絕了,大致是,想法非常好,非常好,就是不能。那麼,我走下一條路 - npm run eject
採用eject後,會多出很多檔案,並且是不可逆向的。
噁心,噁心,那麼多檔案。我要出去透透氣。 - react-app-rewired
這個比較簡單一些。
尋尋覓覓找到了injectbabelplugin
然後找到對應的外掛babel-preset-stage-0,babel-plugin-transform-function-bind
const rewireMobX = require(`react-app-rewire-mobx`);
const rewireEslint = require(`react-app-rewire-eslint`);
const {injectBabelPlugin} = require(`react-app-rewired`);
/* config-overrides.js */
module.exports = {
webpack: function override(config, env) {
config = rewireEslint(config, env);
config = rewireMobX(config, env);
config = injectBabelPlugin(`transform-function-bind`,config)
config.output.publicPath = ``
return config;
}
}
修改完畢,啟動,哦,可以。 真是不錯。
扔掉鍵盤,甩開滑鼠,深深的一口水,想寫行程式碼咋這麼難。
React and ES6 – Part 3, Binding to methods of React class (ES7 included)
decorator
create-react-app
how-to-use-custom-babel-presets
Adding support for custom babel configuration #1357
react-app-rewired
injectbabelplugin
babel-preset-stage-0
babel-plugin-transform-function-bind
相關文章
- jquery繫結未來新建立函式的方法onjQuery函式
- 1:賦值運算子函式賦值函式
- 過載運算子、解構函式函式
- python-算數運算子對應的函式Python函式
- python-邏輯運算子對應的函式Python函式
- Windows 10將允許您建立只有副檔名的檔案Windows
- create-react-app 建立專案有關less的若干問題ReactAPP
- create-react-app 建立專案有關 less 的若干問題ReactAPP
- [MySQL光速入門]010 運算子與函式MySql函式
- PostgreSQL:數字——型別、運算子和函式SQL型別函式
- PostgreSQL:時間——型別、運算子和函式SQL型別函式
- PostgreSQL:陣列——型別、運算子和函式SQL陣列型別函式
- ES6 - 函式與剩餘運算子函式
- echarts 繫結事件處理函式Echarts事件函式
- ES6新特性總結之函式和擴充套件運算子...函式套件
- Dart函式、類和運算子-處理資訊Dart函式
- PostgreSQL:網路地址——型別、運算子和函式SQL型別函式
- C++ 過載運算子和過載函式C++函式
- Rxjs debounce 運算子在 SAP Spartacus 函式節流中的一個實際使用例子JS函式
- proc_create_data函式建立/proc/目錄下的檔案函式
- python之為函式執行設定超時時間(允許函式執行的最大時間)Python函式
- 在繫結變數下使用outline變數
- 函式計算支援 MySQL 例項繫結函式MySql
- 運算子與表示式
- 關於ES6的箭頭函式和展開運算子函式
- React中this值繫結和事件函式傳參React事件函式
- Android單項繫結MVVM專案模板AndroidMVVM
- SQLite中的運算子表示式SQLite
- 位運算子在JS中的妙用JS
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- C++ 禁用類的複製建構函式和賦值運算子C++函式賦值
- Python運算子和表示式Python
- 運算子 運算子
- create-react-app 專案引入 antd 樣式不生效的解決辦法ReactAPP
- 劍指Offer--面試題1:賦值運算子函式面試題賦值函式
- (譯)函式式元件在Vue.js中的運用函式元件Vue.js
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- SXMYSQL 運算子總結rtlMySql