
不明点
ESlintのルールの一つとして,jsx-no-bind があります.これはjsx内でのbindを禁止するものですが,同時にjsx内でのarrow-functionの利用も禁止します.
私が愛用している,eslint-plugin である eslint-config-airbnbには,jsx-no-bind が 2 (エラー出力)で入っています.
jsx内でbind してはいけない,あるいはアローファンクションを定義しては行けない理由はわかります.
なぜならば,render() されるたびに関数が生成され,メモリリークの危険性があるからです.
そこで,インスタンスメソッドとして event に登録する関数を定義すれば良いのですが,一つ不明点がでてきました.
それは,イベントに引数を付与したい時です.具体的には次のようなコンポーネントです.
js
1 2class Sample extends React.Component { 3 constructor(props) { 4 super(props); 5 this.state = { 6 data: [ 7 1, 8 2, 9 3, 10 4, 11 ], 12 }; 13 this.renderButtonList = this.renderBurronList.bind(this); 14 } 15 16 renderButtonList() { 17 return this.state.data.map(item => { 18 return ( 19 <button 20 onClick={(e) => this.onClick(e, item)} 21 /> 22 ); 23 }); 24 } 25 26 render() { 27 return ( 28 <div> 29 {this.renderBurronList()} 30 </div> 31 ); 32 } 33}
あまり望まない回答
- jsx-no-bind を 1 にする.(逃げてる感じがするので)
- ここだけコメント文でルールを無効化する
lint ルール は必ず守らなくちゃいけないとは思ってなく,必要に応じては上書きして無効化するのも視野に入れていますが,質問の回答としてはあまり望んでいません.
上のようなコードを arrow-function なしでかつ 直感的に書く方法が知りたいからです.

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/26 15:38