[解決済み] mapDispatchToPropsでシャドウなしeslintエラーを回避する。
質問
次のようなコンポーネントがあり、それが
no-shadow
で ESlint エラーが発生します。
FilterButton
props
.
import { setFilter } from '../actions/filter';
function FilterButton({ setFilter }) {
return (
<button onClick={setFilter}>Click</button>
);
}
export default connect(null, { setFilter })(FilterButton);
の簡潔な構文を維持しつつ、警告を回避するにはどうしたらよいでしょうか。
mapDispatchToProps
の簡潔な構文とESLintのルールの両方を維持しつつ、警告を回避するにはどうしたらよいでしょうか?
警告を抑制するためにコメントを追加できることは知っていますが、すべてのコンポーネントに対してそれを行うことは冗長で退屈に思えます。
どのように解決するのですか?
ここには4つの選択肢があります。
1. ルールを無効にする。
なぜですか?
ESLintのエラーを回避する最も簡単な方法だからです。
なぜダメなのか?
no-shadow ルールは、非常に一般的なバグを防ぐのに役立ちます。
react-redux
. つまり、生の、接続されていないアクション (これは自動的にディスパッチされません) を呼び出そうとすることです。
言い換えれば
でなかった場合
を使用して、destructuring と props からアクションを取得することです。
setFilter()
はアクションをディスパッチしません (インポートされたアクションを直接呼び出すことになるので、プロップを通じて接続されたアクションを呼び出すのとは対照的です)。
props.setFilter()
を経由してプロップを通じて接続されたアクションを呼び出すのとは対照的です。
react-redux
が自動的にディスパッチします)。
をきれいにすることで 変数シャドウイング をきれいにすることで、あなたやあなたの IDE がエラーを検出する可能性が高くなります。
どのように?
を追加する
eslintConfig
プロパティに
package.json
ファイルは
とするのが一つの方法です。
.
"eslintConfig": {
"rules": {
"no-shadow": "off",
}
}
2. に渡すとき、変数を再代入する。
connect()
.
なぜですか?
無影規則の安全性から恩恵を受け、命名規則を遵守することを選択した場合、それは非常に明示的なものです。
なぜダメなのか?
定型文を導入している。
命名規則を使用しない場合、すべてのアクションのために(まだ意味のある)別の名前を考え出す必要があります。そして、同じアクションがコンポーネント間で異なる名前になる可能性があり、アクション自体に精通することが難しくなります。
命名規則を使用する場合、名前は長くなり、繰り返しになります。
どのように?
命名規則なしで。
import { setFilter } from '../actions/filter';
function FilterButton({ filter }) {
return (
<button onClick={filter}>Click</button>
);
}
export default connect(null, { filter: setFilter })(FilterButton);
命名規則で
import { setFilter, clearFilter } from '../actions/filter';
function FilterButton({ setFilterConnect, clearFilterConnect }) {
return (
<button onClick={setFilterConnect} onBlur={clearFilterConnect}>Click</button>
);
}
export default connect(null, {
setFilterConnect: setFilter,
clearFilterConnect: clearFilter,
})(FilterButton);
3. 小道具からアクションを脱構築しない。
なぜですか?
propsオブジェクトから明示的にメソッドを外して使用することで、そもそもシャドウイングを気にする必要がありません。
なぜダメなのか?
すべてのアクションの前に
props
/
this.props
は繰り返しです(そして、他の非アクションプロップすべてを再構築している場合、一貫性がありません)。
どのように?
import { setFilter } from '../actions/filter';
function FilterButton(props) {
return (
<button onClick={props.setFilter}>Click</button>
);
}
export default connect(null, { setFilter })(FilterButton);
4. モジュール全体をインポートする。
なぜですか?
簡潔である。
なぜダメなのか?
他の開発者(または未来の自分)は、何が起こっているのか理解するのが難しいかもしれません。そして、あなたが従っているスタイルガイドによっては、あなたは no-wildcard-imports ルール .
どのように?
あるモジュールからアクションクリエイターを渡すだけの場合。
import * as actions from '../actions/filter';
function FilterButton({ setFilter }) {
return (
<button onClick={setFilter}>Click</button>
);
}
export default connect(null, actions)(FilterButton);
複数のモジュールを渡す場合は オブジェクトの再構築と残りの構文 :
import * as filterActions from '../actions/filter';
import * as otherActions from '../actions/other';
// all exported actions from the two imported files are now available as props
function FilterButton({ setFilter, clearFilter, setOther, clearOther }) {
return (
<button onClick={setFilter}>Click</button>
);
}
export default connect(null, { ...filterActions, ...otherActions })(FilterButton);
そして、コメントでES6の簡潔な構文が好きだと言っていたので、暗黙の戻り値を持つarrow関数を投げ入れてもいいかもしれませんね。
import * as actions from '../actions/filter';
const FilterButton = ({ setFilter }) => <button onClick={setFilter}>Click</button>;
export default connect(null, actions)(FilterButton);
関連
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] 特定の行のeslintルールをオフにする
-
[解決済み] Reduxのアクションをタイムアウトでディスパッチする方法とは?
-
[解決済み] mapDispatchToPropsとは何ですか?
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] これは純関数ですか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除