スイッチも複雑なコードブロックもありませんSwitch は便利です。式を指定すると、それが case 節内の他の一連の式と一致するかどうかを確認できます。 次の例を考えてみましょう。 const name = "ジュリアナ"; スイッチ (名前) { ケース「ジュリアナ」: console.log("彼女はジュリアナです"); 壊す; ケース「トム」: console.log("彼女はジュリアナではない"); 壊す; } 名前が「Juliana」の場合、メッセージを出力し、すぐにブロックから抜け出します。 switch 関数内では、case ブロック内で return を直接使用することで break を省略できます。 一致するものがない場合、デフォルトのオプションを使用できます。 定数名 = "クリス"; スイッチ (名前) { ケース「ジュリアナ」: console.log("彼女はジュリアナです"); 壊す; ケース「トム」: console.log("彼女はジュリアナではない"); 壊す; デフォルト: console.log("申し訳ございませんが、一致するものはありません"); } Switch は、if を多く使用することを避けるために Redux リデューサーでも頻繁に使用されます (ただし、Redux Toolkit は定型文を少し簡略化します)。 次の例を考えてみましょう。 定数 LOGIN_SUCCESS = "LOGIN_SUCCESS"; LOGIN_FAILED は、次のようになります。 定数authState = { トークン: "", エラー: ""、 }; 関数 authReducer(状態 = authState, アクション) { スイッチ(アクションタイプ){ LOGIN_SUCCESSの場合: return { ...状態、トークン: action.payload }; LOGIN_FAILEDの場合: return { ...状態、エラー: action.payload }; デフォルト: 状態を返します。 } } これに何か問題があるでしょうか? ほとんどありません。しかし、もっと良い代替案はあるのでしょうか? PythonからのインスピレーションTelmo からのこのツイートが私の注目を集めました。 彼は 2 つのスタイルの「スイッチ」を示しており、そのうちの 1 つは Python のパターンに非常に近いものです。 Python にはスイッチがないので、より良い代替手段が提供されます。 まず、コードを JavaScript から Python に移植してみましょう。 LOGIN_SUCCESS = "ログイン成功" ログイン失敗 = "ログイン失敗" auth_state = {"トークン": "", "エラー": ""} auth_reducer を定義します(状態 = auth_state、アクション = {}): マッピング = { LOGIN_SUCCESS: {**state, "token": action["payload"]}, LOGIN_FAILED: {**state, "error": action["payload"]}, } マッピングを返す。get(アクション["type"], state) Python では、辞書を使用してスイッチをシミュレートできます。 dict.get() は、スイッチのデフォルト ステートメントを表すために使用できます。 存在しないキーにアクセスすると、Python は KeyError エラーをトリガーします。
.get() メソッドはエラーを発生せず、存在しないキーにデフォルト値を指定できるため、より安全なアプローチです。
したがって、Python のこの行: マッピングを返す。get(アクション["type"], state) JavaScript での同等のものは次のとおりです。 関数 authReducer(状態 = authState, アクション) { ... デフォルト: 状態を返します。 ... } 辞書を使用してスイッチを置き換える前の例をもう一度考えてみましょう。 定数 LOGIN_SUCCESS = "LOGIN_SUCCESS"; LOGIN_FAILED は、次のようになります。 定数authState = { トークン: "", エラー: ""、 }; 関数 authReducer(状態 = authState, アクション) { スイッチ(アクションタイプ){ LOGIN_SUCCESSの場合: return { ...状態、トークン: action.payload }; LOGIN_FAILEDの場合: return { ...状態、エラー: action.payload }; デフォルト: 状態を返します。 } } スイッチを使わずにこれを行うことができます: 関数 authReducer(状態 = authState, アクション) { 定数マッピング = { [LOGIN_SUCCESS]: { ...状態、トークン: action.payload }, [LOGIN_FAILED]: { ...状態、エラー: action.payload } }; マッピング[アクション.type] || 状態を返します。 } ここでは、ES6 の計算プロパティを使用します。ここでは、マッピングのプロパティは、LOGIN_SUCCESS と LOGIN_FAILED の 2 つの定数に基づいてオンザフライで計算されます。 定数マッピング = { [LOGIN_SUCCESS]: { ...状態、トークン: action.payload }, [LOGIN_FAILED]: { ...状態、エラー: action.payload } } このアプローチについてどう思いますか?スイッチにはいくつかの制限があるかもしれませんが、リデューサーにとってはより良いソリューションかもしれません。 しかし、このコードはどのように動作するのでしょうか? パフォーマンスはどうですか?スイッチのパフォーマンスは辞書よりも優れています。次の例を使用してこれをテストできます。 console.time("サンプル"); (i = 0; i < 2000000; i++ とします) { const nextState = authReducer(authState, { タイプ: LOGIN_SUCCESS、 ペイロード: "some_token" }); } console.timeEnd("サンプル"); 10回ほど測ってみると、
上記は、JavaScript で switch ステートメントを使用する必要がない理由の詳細です。JavaScript の switch ステートメントの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySQLの指定順序ソートクエリについての簡単な説明
>>: Mysql5.6.36 スクリプトのコンパイル、インストール、初期化のチュートリアル
Linux システムは典型的なマルチユーザー システムです。異なるユーザーは異なる立場にあり、異なる...
次のように、Windows/MacOS からログインした Linux の SSH ターミナルで簡単に...
Binlog は、MySQL データの変更を記録するために使用されるバイナリ ログ ファイルです。B...
Mixin は、再利用可能な機能を Vue コンポーネント間で分散する非常に柔軟な方法を提供します。...
NULL 値によると、MySQL の NULL 値は単にデータがないことを意味します。NULL 値は...
Firefox、Opera、その他のブラウザは Webdings フォントをサポートしていません。回...
この記事では、物流タイムライン効果を実現するためのVueの具体的なコードを例として紹介します。具体的...
この記事の例では、ドロップダウンメニューのカプセル化を実装するためのVue + Element UI...
各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...
まず、GIF 操作を見てみましょう。ケース1: スペースがフィルタリングされるスペースの代わりに角括...
1. 環境要件1. Docker 17以上がインストールされている2. コンテナ操作docker r...
状況は以下のとおりです: (PS: 赤いボックスは iframe 領域を表し、灰色の四角形は上記の ...
オペレーティングシステム: Ubuntu 17.04 64ビットMySQL バージョン: MySQL...
ある設計士はこう尋ねた。「実際のプロジェクト制作には参加せずに、純粋に設計だけをすることはできますか...
目次外部キーの役割mysql 外部キー設定方法要約する外部キーの役割データの一貫性、整合性を維持し、...